In dit artikel word het gebruik van Allow, Deny en Require in het .htaccess bestand uitgelegd om de toegang tot webpagina's te controleren. Als je bijvoorbeeld wordt getroffen door een aanval vanaf een specifiek bereik van IP-adressen, kun je regels toevoegen om ze te blokkeren op basis van het IP-adres of andere variabelen. Met Apache 2.4 zijn er wijzigingen in de richtlijnen die worden gebruikt voor toegangscontrole. In dit artikel worden de wijzigingen uitgelegd en worden enkele voorbeelden gedeeld om je te helpen de beste oplossing voor je site te implementeren.
Wijzigingen in Apache 2.4
Apache 2.2 gebruikt de authz_host_module om toegang te controleren met behulp van de regels Deny, Allow en Order.
Apache 2.4 gebruikt ook de authz_host_module voor toegangscontrole, maar gebruikt ook de authz_core_module, die de nieuwe Require-richtlijn gebruikt.
Dus eigenlijk zijn de regels om de toegang te regelen verschillend, afhankelijk van de versie van Apache. Om hierbij te helpen, heb ik hieronder een aantal voorbeelden gegeven.
Codevoorbeelden
Hier zijn enkele voorbeelden die de verschillende vereiste syntaxis vergelijken, afhankelijk van de versie van Apache.
Belangrijk! Gebruik geen 2.2 en 2.4 regels op dezelfde server, dit kan problemen en/of fouten veroorzaken. Een workaround hiervoor is het gebruik van Voorwaardelijke Richtlijnen, zoals hieronder wordt uitgelegd.
Blokkeer alle verzoeken
# ALLE VERZOEKEN BLOKKEREN
# Apache 2.2
Order deny,allow
Deny from all
# Apache 2.4+
Require all denied
Accepteer alle verzoeken
# ALLE VERZOEKEN TOESTAAN
# Apache 2.2
Order allow,deny
Allow from all
# Apache 2.4+
Require all granted
Toegang blokkeren op basis van hostnaam
# URL BLOKKEREN
# Apache 2.2
Order Allow,Deny
Allow from all
Deny from voorbeeld.nl
# Apache 2.4+
<RequireAll>
Require all granted
Require not host voorbeeld.nl
</RequireAll>
Merk op dat <RequireAll> en Require all granted vereist zijn wanneer je iets meer doet dan ofwel Require all granted of Require all denied (zoals getoond in de bovenstaande voorbeelden). Hier nog een paar voorbeelden om het concept verder te illustreren met Require/All.
Toegang blokkeren op basis van IP-adres
# IP-ADRES BLOKKEREN
# Apache 2.2
Order Allow,Deny
Allow from all
Deny from 111.111.111.111
Deny from 222.222.222.222
Deny from 123.123.123.123
# Apache 2.4+
<RequireAll>
Require all granted
Require not ip 111.111.111.111
Require not ip 222.222.222.222
Require not ip 123.123.123.123
</RequireAll>
Toegang blokkeren tot bestand vanaf specifiek IP-adres
# TOEGANG TOT BESTAND BLOKKEREN VANAF IP-ADRES
# Apache 2.2
<Files ~ "example\.txt">
Order Allow,Deny
Allow from all
Deny from 123.123.123.123
</Files>
# Apache 2.4+
<Files ~ "example\.txt">
<RequireAll>
Require all granted
Require not ip 123.123.123.123
</RequireAll>
</Files>
Notitie: gebruik niet zowel 2.2- als 2.4-richtlijnen op dezelfde server. Dit kan fouten veroorzaken. Gebruik alleen de code die van toepassing is op jouw versie van Apache. Of, als je een modulair, plug-and-play-fragment wilt maken dat kan worden toegevoegd aan elke Apache-versie 2.2 of 2.4+, bekijk dan de techniek voor Voorwaardelijke Richtlijnen hieronder.
Voorbeeld: Voorwaardelijke Richtlijnen
In sommige gevallen weet je misschien niet welke versie van Apache je gebruikt. In dat geval zouden de volgende voorwaardelijke richtlijnen je kunnen helpen. Je kunt de volgende code gebruiken op elke Apache-server versie 2.2 of 2.4+.
# Apache 2.2
<IfModule !authz_core_module>
Order Deny,Allow
Deny from all
Allow from 123.123.123.123
</IfModule>
# Apache 2.4+
<IfModule authz_core_module>
<RequireAll>
Require ip 123.123.123.123
</RequireAll>
</IfModule>
Indien opgenomen in het .htaccess bestand, zal deze code de juiste versie van Apache detecteren en de juiste richtlijnen gebruiken voor toegangscontrole. Dit is hoe het werkt: