Ajout RW pour sortir une 403 + explications sur la plomberie Require

This commit is contained in:
Gregory Colpart 2023-11-13 15:33:32 +01:00
parent d83e783d25
commit b8a8f3fb10

View file

@ -801,6 +801,8 @@ Substitute "s/REGEXP/REMPLACEMENT/i"
## Autorisations
### Require
Historiquement Apache, utilisait les directives `Order`, `Allow`, `Deny`, et `Satisfy` pour définir les autorisations des ressources qu'il fournissait. Depuis la version 2.4 ces directives sont dépréciées, il ne faut donc plus les utiliser ; bien qu'elles soient toujours utilisables via le module [`mod_access_compat`](https://httpd.apache.org/docs/2.4/fr/mod/mod_access_compat.html). Ces quatres directives sont remplacées par `Require` fournies par le module [`mod_authz_host`](https://httpd.apache.org/docs/2.4/fr/mod/mod_authz_host.html) ; la migration sommaire d'un module à l'autre est décrit dans la [release note 2.4](https://httpd.apache.org/docs/2.4/fr/upgrading.html#run-time).
**/!\\ Il ne faut jamais mélanger d'anciennes directives comme Order, Allow ou Deny avec des nouvelles comme Require, car le comportement n'est pas défini ce qui vous emenera dans du deboguage interminable. /!\\**
@ -845,6 +847,66 @@ AuthUserFile /foo/.htpasswd
</RequireAll>
~~~
#### Plomberie Require (à valider)
<https://httpd.apache.org/docs/current/fr/mod/mod_authz_core.html#require>
Apache va prendre en compte toutes les sections `<Directory XXX>` (ou `<Files XXX>`) de la plus large à la plus précise :
* Tout d'abord la (ou les) section(s) `<Directory />`
* Ensuite `<Directory /foo>`
* Ensuite `<Directory /foo/bar>`
* etc.
Les options explicites de la section la plus précise écraseront les options explicites précédentes.
Si il y a plusieurs sections `<Directory XXX>` identiques, Apache va les évaluer dans cet ordre :
* Configuration générale
* Dans `<VirtualHost XXX>`
* Dans les fichiers `.htaccess`
Les options explicites dans `<VirtualHost XXX>` écrasent celles de la configuration générale.
Les options explicites des fichiers `.htaccess` écrasent celles dans `<VirtualHost XXX>`
Enfin, si dans un même niveau de section il y a des options identiques, ce sont les dernières qui écrasent les premières.
Voici un exemple :
~~~
<Directory />
Require ip 192.0.2.21
</Directory>
<Directory /home/foo>
Require ip 192.0.2.23
</Directory>
<Directory /home/foo>
Require ip 192.0.2.24
</Directory>
<VirtualHost *>
Servername www.example.com
DocumentRoot /home/foo/www
<Directory />
Require ip 192.0.2.22
<Directory>
<Directory /home/foo>
Require ip 192.0.2.25
</Directory>
</VirtualHost>
~~~
Les évaluations se font de l'IP la plus petite à la plus grande... eu final, seule l'IP 192.0.2.25 est autorisée !
Note : les options peuvent aussi être utilisées dans une section `<Location XXX>`, elles vont écraser les options `<Directory XXX>` (ou `<Files XXX>`) mais on préfèrera éviter.
Note 2 : l'écrasement des options correspond à l'option par défaut `AuthMerging Off` mais cela [peut se changer](https://httpd.apache.org/docs/current/fr/mod/mod_authz_core.html#authmerging)
### Authentification HTTP
#### HTTP Basic Authentication (mod_auth_basic)
@ -995,6 +1057,9 @@ RewriteRule (.*) /page-destination [QSD,R=301,L]
RewriteCond %{REQUEST_URI} (.*page.php)\/(key=.*)
RewriteRule (.*) /%1?%2 [QSD,R=301,L]
# Envoyer une erreur 403 en fonction de l'entête User-Agent
RewriteCond %{HTTP_USER_AGENT} "FooBot"
RewriteRule .* - [F,L]
~~~
Pour supprimer un Query String avec une Rewrite Rule :