NIWO - nl.internet.www.ontwerpFAQ

Apache/.htaccess FAQ

Inhoud

  1. Inleiding
  2. Ik heb een .htaccess bestand geplaatst maar het bestand wordt genegeerd?
  3. Hoe kan ik een bepaalde directory van mijn site afschermen?
  4. Hoe veilig is bescherming d.m.v. .htaccess?
  5. Hoe kan ik mijn eigen errordocumenten gebruiken?
  6. Hoe kan ik een ander default document instellen?
  7. Hoe kan ik voorkomen dat een bepaald bestand door een bezoeker wordt bekeken?
  8. Hoe werkt htaccess nou eigenlijk?
  9. Waar kan ik meer lezen over Auth* ?
  10. Hmmm... "htpasswd", maar waar haal ik dat programma vandaan?
  11. Is er toevallig ook een niet-telnet manier om met .htpassword te werken?

1. Inleiding

Soms is het nodig dat bepaalde delen van een site alleen voor een beperkte groep bezoekers toegankelijk is. De NSCA en Apache webserver-programma's bieden hiervoor een goed middel: .htaccess.

Screenshot inlogschermpje

Htaccess is echter meer dan alleen toegangs-restrictie: het is ook mogelijk om bijvoorbeeld alleen bepaalde bestanden uit te sluiten van weergave in de browser van de bezoeker, of om je eigen errordocumenten (404: "Not found", 500: "Internal server error") te maken.

Deze FAQ bevat een aantal veelgestelde .htaccess vragen in de nieuwsgroep nl.internet.www.ontwerp.
We gaan er vooral van uit dat er wordt gebruik gemaakt van de Apache webserver, niet alleen vanwege onze gebrekkige kennis van NSCA, maar ook omdat Apache het meest gebruikte webserver-programma is.
Opmerkingen, suggesties en kritiek zijn welkom!

top

2. Ik heb een .htaccess bestand geplaatst maar het bestand wordt genegeerd?

De beheerder van de server moet in het configuratie bestand access.conf of httpd.conf de volgende regel aanpassen:

  AllowOverride None

moet worden:

  AllowOverride All

Vervolgens moet Apache herstart worden, onder Linux/Unix met het commando:

  apachectl graceful

Een beschrijving van dit commando en van alle command line opties vind je in de manual page van apachectl.

top

3. Hoe kan ik een bepaalde directory van mijn site afschermen?

Plaats in de betreffende directory een bestand met de naam .htaccess, en de volgende regels:

 AuthUserFile /een/directory/buiten/de/wwwroot/.htpasswd
 AuthGroupFile /dev/null
 AuthName "Mijn Geheime Webstek"
 AuthType Basic

 <Limit GET POST>
 require marieke
 </Limit>

Je kan dit .htaccess aanmaken met bijvoorbeeld vi of notepad. Het is een gewoon tekst bestand, dus het kan met jouw favoriete tekst editor.

Met het programma htpasswd kan je een wachtwoord bestand aanmaken, waar de .htaccess uit leest.
Dit doe je als volgt:

  • Ga eerst naar de directory waar je het wachtwoord bestand wilt plaatsen. Hoewel het wachtwoord geëncrypt wordt opgeslagen is het verstandig om een directory te kiezen die buiten de root van de webserver valt om te voorkomen dat anderen jouw password file kunnen lezen.
  • Type: htpasswd -c .htpasswd marieke
  • Htpasswd zal een nieuw bestand aanmaken met de naam .htpasswd en je om een wachtwoord en een bevestiging van het wachtwoord vragen.
  • De parameter -c zorgt ervoor dat er een nieuw bestand wordt aangemaakt.

Als je meer gebruikers wilt toevoegen, kan je dus volstaan met:

  htpasswd .htpasswd joke

Let op dat je deze gebruiker ook aan de .htaccess toevoegt, bij het <Limit> gedeelte.

De .htaccess werkt recursief, m.a.w. de onderliggende directories worden ook door de .htaccess beschermt.

top

4. Hoe veilig is bescherming d.m.v. .htaccess?

In .htaccess kun je verschillende beveiligingsmethoden activeren. De meest bekende is HTTP Basic Authentication. Deze biedt enige mate van afscherming, maar omdat het password leesbaar over het Internet wordt getransporteerd geldt deze methode niet als erg veilig. Om een password-afscherming veilig te maken zou je gebruik moeten maken van mod_ssl of Apache-SSL.

Nog enkele opmerkingen:

  • Niets is zeker. Vrijwel overal kan een beveiligingsgat in zitten.
  • Iedereen kan slordig omspringen met een wachtwoord. Dit is niet een specifiek .htaccess probleem.
  • Zorg ervoor dat de rechten op serverniveau goed geregeld zijn. Geef de .htaccess -rw-r--r-- en als eigenaar jij zelf.

top

5. Hoe kan ik mijn eigen errordocumenten gebruiken?

Simpel, maar je moet het even weten. Zet het volgende in een .htaccess:

  ErrorDocument 404 /error/404.html
  ErrorDocument 500 /error/500.html

Veelvoorkomende HTTP fout-codes zijn:

  • 400: "Bad request"
  • 401: "Unauthorized"
  • 403: "Forbidden"
  • 404: "Not found"
  • 500: "Internal server error"

Een compleet overzicht van alle HTTP status codes vindt je in de HTTP-standaard.

Extra leuk: maak van de errorpagina een PHP of ASP pagina, die de webmaster per e-mail op de hoogte stelt van de foutmelding, de naam van de gezochte pagina, de referer, enzovoort.

top

6. Hoe kan ik een ander default document instellen?

Een default document is het document dat wordt getoond als je alleen een url in je browser geeft.
Als je bijvoorbeeld http://come.to/niwo ingeeft krijg je het bestand "index.htm" te zien.

Voeg aan de .htaccess de volgende regel toe:

  DirectoryIndex index.php4 index.html

...zorgt ervoor dat index.php4 je standaard document is.

top

7. Hoe kan ik voorkomen dat een bepaald bestand door een bezoeker wordt bekeken?

Soms wil je voorkomen dat een bepaald bestand door de bezoekers van je website direkt bekeken kan worden, bijvoorbeeld als je logingegevens van een database in een include bestand stopt.
Met de volgende regels kan je voorkomen dat bezoekers het bestand kunnen bekijken:

 <Files *.inc>
 Order allow,deny
 Deny from all
 </Files>

top

8. Hoe werkt htaccess nou eigenlijk?

.htaccess is een configuratiefile dat door de web server Apache wordt gelezen.

Enkele bijzonderheden van .htaccess:

  • In tegenstelling tot de gewone configuratiefiles hoeft de Apache server na het wijzigen van .htaccess niet te worden herstart. Hierdoor kun je als website-beheerder zelf instellingen wijzigen zonder tussenkomst van de provider/systeembeheerder met het root password.
  • Apache kijkt bij het ophalen van een file in elke directory of er een .htaccess-file bestaat en past de instellingen toe op de betreffende directory en al zijn subdirectories, tenzij een lager gelegen .htaccess weer andere instellingen bevat. Dit is een krachtig mechanisme, maar het gaat ook enigszins ten koste van de performance.
  • De provider/systeembeheerder moet ondersteuning voor .htaccess aanzetten met de configuratie AllowOverride All in httpd.conf.
  • De filenaam is normaliter .htaccess, inclusief het puntje, maar de provider/systeembeheerder kan de naam veranderen met de configuratie AccessFileName in httpd.conf. Let op dat op Linux/Unix een filenaam die begint met een punt standaard niet verschijnt met het ls commando. Gebruik ls -a.

top

9. Waar kan ik meer lezen over Auth* ?

In de Apache documentatie:

top

10. Hmmm... "htpasswd", maar waar haal ik dat programma vandaan?

htpasswd is normaal gesproken op de (Linux/Unix) server aanwezig. Als je htpasswd intypt en je krijgt bash: htpasswd: command not found, probeer dan het programma op te sporen met het commando:

  find / -name htpasswd -print 2>/dev/null

Vaak is dat /usr/bin/htpasswd maar soms ook een ander pad. Je kan dan dus:

  /usr/bin/htpasswd -c .htpasswd marieke

doen om het wachtwoordbestand aan te maken. Het wachtwoord bestand wordt dan aangemaakt in de directory waar je op dat moment staat.

top

11. Is er toevallig ook een niet-telnet manier om met .htpassword te werken?

Je kunt ook op je eigen systeem een .htpassword aanmaken en deze uploaden naar de server. Je hebt dan wel een implementatie van het htpasswd programma nodig voor jouw eigen besturingssysteem.

Ook bestaan er verschillende htpasswd gateways die een htpasswd file voor je kunnen maken:

Met dank aan Niels Leenheer.

top