Delen van een website afschermen met een password
Sommige websites zijn geheel of gedeeltelijk afgeschermd. Om die sites te bezoeken moet je je aanmelden ('inloggen') met
een gebruikersnaam en een password. Heel vaak wordt dat 'account' genoemd. Zonder account kun je op een dergelijke site weinig
of niets doen. Een bekend voorbeeld is ongetwijfeld www.outlook.com, de
opvolger van hotmail.comen daarmee verbonden diensten zoals Skype. Maar ook bij een webwinkel doe je zonder account niet veel.
Deze bladzijde bevat een algemeen verhaal over het afschermen van (een deel van) een website. Het behandelt hier een
aantal aspecten van, maar het is zeker niet volledig.
Er wordt hiet gesproken over afschermen, niet over beveiligen. De twee begrippen hebben
veel met elkaar te maken:
- Met afschermen bedoelen we hier: ontoegankelijk maken voor onbevoegden.
Dit is werk voor de website-programmeur. Die moet er voor zorgen dat de afscherming goed is geprogrammeerd, dat bestanden met account-gegevens niet 'zomaar' toegankelijk zijn en dat de afgeschermde bestanden in een door de web-host beveiligde directory bevinden.
- Bij beveiligen bedoelen we hier: voorkomen dat de afscherming kan worden omzeild.
Dit is de verantwoordelijkheid van de web-host, het bedrijf dat zijn servers beschikbaar stelt voor het
publiceren van websites.
Professionele hosting bedrijven hebben vaak beveiligde directories. Meestal heten die private
of _private. Ook komt het voor dat je directories zelf kunt beveiligen door een instelling of door
dat het hosting bedrijf dat voor je regelt.
De inhoud van een beveiligde directory kan niet door een browser worden gedownload, maar kan wel worden gebruikt
door scripts die op de server draaien. Een prima plaats dus om vertrouwelijke gegevens op te slaan.
Web-winkels en dergelijke maken daar veel gebruik van.
Het echt goed afschermen en beveiligen van een website is werk voor professionals. In de hobbysfeer
zou je er eigenlijk niet mee te maken moeten hebben.
Het is echter zeer wel mogelijk om zelf een afscherming te bouwen waarmee je "gewone"
surfers buiten de deur kunt houden:
- Als je website draait onder de webserver-software Apache (vaak op een UNIX- of LINUX server)
kun je meestal gebruik maken van htaccess. Overigens stelt niet elke hosting-provider dat beschikbaar.
In voorkomende gevallen daar dus even informeren.
De file .htaccess verwijst naar een file .htpasswd waarin de account-informatie wordt opgeslagen.
Voor het aanmaken van passwords kun je een htpasswd-generator gebruiken. Die zijn op internet ruim voorhanden.
Opmerking: .htaccess kan ook worden ingezet voor o.a. het
opvangen van HTTP-fouten. Zie het item "HTTP-fout 404 opvangen".
Je bezoekers krijgen een inlogscherm te zien dat er ongeveer zo uitziet:
Alleen met een juiste user/password combinatie wordt toegang verleend tot de afgeschermde pagina.
De bezoeker mag het drie keer proberen. Daarna ontstaat HTTP-fout 401, die je kunt opvangen op dezelfde manier
als je HTTP-fout 404 kunt opvangen: Je vervangt de foutenpagina van de browser door je eigen pagina-met-foutmelding.
Dit is een prima methode als je niet te veel accounts hebt die niet zo vaak veranderen.
- Een andere aanpak is met een formulier met twee tekst velden, namelijk voor het user-id en het password.
Een typisch voorbeeld staat hieronder.
Het veld voor het user-id is een gewoon tekstveld: <input type="text">
Het veld voor het password is ook een tekst veld: <input type="password">
Hierdoor zie je niet wat je hebt ingetypt. Voor meekijkers is het moeilijker om achter je password te komen.
Als je op login klikt wordt de data uit het formulier verstuurd naar de host. De data wordt verwerkt
door een script dat op de host draait. We hebben het dan over ASP, ASP.NET, PHP, CGI, enz. Dit script
raadpleegt een database waarin de gegevens van het account staan. Als de gegevens correct zijn laat het
script de gebruiker toe tot het beveiligde gebied, anders komt er een foutmelding.
Opmerking: JavaScript is voor dit doel niet geschikt!
Het is mogelijk om het password onderweg van de gebruiker naar de host te onderscheppen. Dat kun je voorkomen
door een secure protocol zoals https:// te gebruiken, dat informatie versleuteld verstuurt
vanaf je PC. Je kunt dat herkennen aan een hangslotje in de statusbalk van je browser.
Men zegt dat sommige providers https: aanbieden waarbij alleen beveiligde data
wordt verstuurd vanaf de host naar de PC, maar NIET vanaf de PC naar de host. Dat is prima voor
het tonen van vertrouwelijke data. Voor het werken met passwords is het ongeschikt. Wees daar op bedacht!
- Het is ook mogelijk om de user-name en het password door het script op de server te laten verwerken
zonder een database. Dat is echter moeilijker te beveiligen tegen ongeoorloofd gebruik dan met
een database, omdat de account gegevens in het script moeten worden geprogrammeerd. Een optie is om de
user-name en het password vóór verzending door de cliënt te versleutelen, waardoor er iets
anders wordt verstuurd dan je bezoeker heeft ingevoerd. Versleutelen kun je betrekkelijk eenvoudig doen
met JavaScript. Laat de scripts op de server reageren op de versleutelde gegevens.
Het is echter moeilijk (lees: onmogelijk) om het 100% waterdicht te krijgen, tenzij je het script met de
accountgegevens in een beveiligde directory plaatst.
- Met behulp van alléén HTML en JavaScript is het niet mogelijk om een goede afscherming te
bouwen. Dat komt doordat JavaScript op de lokale PC draait, niet op de host. Deze site zou echter Ben's
Hobbyhoekje niet zijn als tenminste niet geprobeerd werd iets voor elkaar te krijgen ...
In het item "Beperkte password protectie met JavaScript",
wordt een poging ondernomen.
Tenslotte...
Beveiligde directories tref je eigenlijk alleen aan bij professionele hosting bedrijven. Als je je website
publiceert op web-ruimte die je krijgt bij een ADSL-abonnement of bij het lidmaatschap van een vereniging (zoals deze website)
heb je die mogelijkheid gewoonlijk niet.
Hetzelfde geldt voor ASP.NET, PHP, Python en andere scripttalen die aan de server-kant worden verwerkt.
Als je vertrouwelijke zaken op internet wilt publiceren moet je jezelf goed afvragen of die publicatie
echt wel nodig is. Een gebrekkige afscherming wordt gemakkelijk omzeild. In sommige gevallen kan dat acceptabel
zijn, zoals bij een verzameling vakantie-foto's. Neem, als de afscherming er echt toe doet, een professioneel
bedrijf in de arm.