Htaccess-beveiligde mappen

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Regelmatig maak ik gebruik van .htaccess om mappen met een wachtwoord te beveiligen. Het doel is om bots buiten de deur te houden, en om een eenvoudige privacy-gerelateerde drempel op te werpen. Dit artikel is beperkt tot deze use case.

Hoe het werkt

Bepaal pad naar .htpasswd-bestand

Alle wachtwoorden worden in één .htpasswd-bestand opgeslagen. Op mijn VPS is het pad:

/home/accountnaam/public

Bepaal loginnaam & wachtwoord

Meestal eenvoudige dingen zoals:

project-kippen-witten
project-kippen-witten

Genereer hash

Ga naar http://www.tools.dynamicdrive.com/password/ en vul in:

  • Gebruikersnaam & wachtwoord → Zie hierboven
  • Pad naar .htpasswd-file → Zie hierboven
  • File names to protect → Overslaan

Vervolgens wordt een .htaccess en een .htpasswd-bestand gegenereerd.

Voeg wachtwoord toe aan .htpassword

Als er al een .htpasswd-bestand is: De gegenereerde regel toevoegen. Anders een nieuw bestand aanmaken met die ene regel als inhoud (zie elders voor details).

.htaccess-bestand aanmaken

Het gegenereerde .htaccess-bestand werkt voor mij niet. Dit werkt wel:

AuthName "I am so glad that you are here"
AuthType Basic
AuthUserFile /home/accountnaam/public/.htpasswd
require valid-user

.htaccess-bestand plaatsen

Dit bestand moet je plaatsen in de map die afgeschermd moet worden. Bv.:

~/accountnaam/domeinnaam/public

Test

Succes!

Hostconfiguratie-bestand moet correct zijn

In het bestand waarin je voor Apache een domeinnaam specificeert, moet toegestaan worden dat je middels .htaccess mappen beveiligd. Ik geloof dat het gaat om de regel Require all granted:

<Directory /home/flup/public/example.com/public>

   AllowOverride All
   Require all granted
   RewriteEngine on
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

</Directory>

Pad naar .htpasswd achterhalen

Het kan in het begin een lastig puzzeltje zijn om het correcte pad te specificeren. Dat kan via PHP achter redelijk snel, bv. in een bestand PadTest.php met inhoud:

<?php
phpinfo();
?>

Het pad naar dit bestand staat vermeld in de sectie Apache environment

Deny from all (feb. 2019)

In 2019 had ik een onwillige WordPres-Updraft-map. Daarin stond een .htaccess-bestand met alleen de tekst deny from all.

Wellicht zou dit beter zijn geweest (apache 2.2):

order deny,allow
deny from all
allow from 127.0.0.1

Of misschien dit voor Apache 2.4?

Require local

Bronnen