Magazine

Firewall pour une application web en htaccess

Publié le 12 mai 2008 par Abdeldjalil Belakhdar

Cet article est une traduction d’un article du site www.0×000000.com que j’ai apprécié et qui est très utile, sans trop de bavardage commençons.
Aujourd’hui, j’ai eu le temps pour un autre coup d’œil à mon nouveau. Htaccess, et je peux vous dire que ça deviens de mieux en mieux. Je pense que c’est assez bien fait maintenant, et je suis vraiment heureux avec lui. J’ai également plusieurs questions sur la façon dont il fonctionne exactement. Donc, je poste mon dernier. Htaccess ici, en plus d’une solution sur les différentes règles mod_rewrite-je utiliser
Tout d’abord, voici ma dernière beauté:

RewriteEngine On
Options +FollowSymLinks
ServerSignature Off

RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR]
RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC,OR]

RewriteCond %{HTTP_REFERER} ^(.*)(<|>|’|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{HTTP_COOKIE} ^.*(<|>|’|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{REQUEST_URI} ^/(,|;|:|<|>|”>|”<|/|\\\.\.\\).{0,9999}.* [NC,OR]

RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|scan).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(<|>|’|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]

RewriteCond %{QUERY_STRING} ^.*(;|<|>|’|”|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*\.[A-Za-z0-9].* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(<|>|’|%0A|%0D|%27|%3C|%3E|%00).* [NC]

RewriteRule ^(.*)$ access_log.php

Tout d’abord, nous défissions la configuration de base de façon à utiliser le module mod_rewrite d’Apache.
RewriteEngine On
Options +FollowSymLinks
Ensuite, notre première règle de base est de désactiver le serveur de signature, qui peut être utile afin de stoper bannière saisir:
ServerSignature Off

je utiliser 2 flags différent, à savoir:
NC - Not Case sensitive
OR - Yep, OR!
La première règle est fondée sur REQUEST_METHOD. La je choisie avec quel méthode mon client va être autorisé a se connecté ou pas accepter ou refusé, donc ici nous allons refusé les méthodes : HEAD ,TRACE ,DELETE et TRACK

RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR]

THE_REQUEST est la totalité de l’url que le client envoie a notre serveur afin d’avoir sa page, et afin d’évité d’avoir 2 requête ou 2 header http et pallié les failles de type http splitter ou l’injection CRLF comme on l’appelait auparavant.

RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC,OR]

HTTP_REFERER peut contenir des caractères qui peuvent utilisé pour un test de pénétration d’une application web ou peu contenir des virus a payload
Donc bloquer tout les caractères qui ne se présenteront pas dans une requête légitime et empêcher que quelque chose de malicieux soit exécuté

RewriteCond %{HTTP_REFERER} ^(.*)(<|>|’|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]

HTTP_COOKIE c’est la même chose que pour HTTP_REFFERER et ou des caractères ou des payload peuvent être chargé dans des cookies
RewriteCond %{HTTP_COOKIE} ^.*(<|>|’|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]

REQUEST_URI est importante pour la protection d’un serveur, surtout contre les attaques de BufferOverflow ou bien ……
RewriteCond %{REQUEST_URI} ^/(,|;|:|<|>|”>|”<|/|\\\.\.\\).{0,9999}.* [NC,OR]

Cet ensemble de règles va filtré certaines signatures de navigateurs qui vont nous économisé notre bande passante et éviter de voir s’enflammer notre fichier de log pour rien et contrecarré les plans des pirates les moins expérimenter ….

RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|scan).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(<|>|’|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]

QUERY_STRING est probablement la plus importante de tous étant donné qu’avec on va pouvoir prévenir des attaques de type sql injection ou xss ou remote shell injection .

RewriteCond %{QUERY_STRING} ^.*(;|<|>|’|”|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(localhost|loopback|127\.0\.0\.1).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*\.[A-Za-z0-9].* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(<|>|’|%0A|%0D|%27|%3C|%3E|%00).* [NC]
Finalement dans le ca ou une de c’est règles s’avère être juste on redirige vers un fichier qui va récolter les informations du suspect.

RewriteRule ^(.*)$ access_log.php
Donc j’espère que ce fichier vous sera utile afin d’assurer une meilleur sécurité……
Fin

Donc c’était ma traduction plus ou moins juste, je vous conseil fortement de lire l’article d’origine et aussi de faire un tour su le net pour lire sur le module mod_rewrite d’apache afin d’avoir une meilleur compréhension et n’hésitez pas a partager avec nous votre expérience dans ce domaine, aussi je tien a rappeler que la plupart de c’est attaques vous pouvez les voir sur WebGoat
Article d’origine : http://www.0×000000.com/index.php?i=567


Retour à La Une de Logo Paperblog

A propos de l’auteur


Abdeldjalil Belakhdar 10 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte