.htaccess: quelques explicationsMise à jour le Mardi, 23 Juin 2009 19:26 Écrit par Tr@nquille Mercredi, 20 Mai 2009 07:32 Sécuriser son site avec le fichier .htaccess
(article en cours de modifications suite à remodelage du fichier htaccess final) Une des premières choses à faire une fois installé son cms favori (moi c'est joomla) est de le sécuriser. Ce genre de protection est, selon les dires de certains, inviolable. Je dirai donc "presqu'inviolable'. Bref, le plus dur pour moi est de comprendre les règles de rewritecond et rewriterules. Je vais donc me faire ici-même un petit pense-bête sur certaines d'entre-elles. On commence par les règles de base.
Les règles de base donc:Quelques petites choses que je place en début de fichier: SetEnv REGISTER_GLOBALS 0 SetEnv PHP_VER 5 ServerSignature Off Options All -Indexes Options +FollowSymLinks #SetEnv SERVER_ADMIN xxxxxxarobasetranquille-informatique.fr #ne se surcharge pas chez ovh on dirait SetEnv TZ Europe/Paris #allow_url_include 0 # déjà présente chez ovh par défaut AddDefaultCharset UTF-8 AddLanguage fr-FR .html .htm .css .js <Files .htaccess> order allow,deny deny from all </Files>
Lignes 11, 12, 13 et 14:interdire l'accès au fichier htaccess à travers le navigateur (mais normalement c'est déjà ainsi avec apache...) ligne 1:Définit si oui ou non les variables EGPCS (Environment, GET, POST, Cookie, Server) seront enregistrées comme des variables globales. Ligne 2:positionner l'exécution du php v5 par défaut (chez ovh) ligne 3:Afficher (ou non) les signatures du serveur, lors d'une erreur, d'une page non trouvée ou autre, le serveur peut afficher des infos supplémentaires comme la version apache, le nom et l'adresse mail de l'admin, etc. Ligne 4:ne pas permettre le listage des fichiers des dossiers, à partir du dossier dans lequel est le fichier htaccess en cours (racine / en général), et pour tous ses sous-dossiers. J'ai essayé ceci:
<Directory /dossier> Options +Indexes </Directory> dans le htaccess racine, mais apparemment chez ovh ça ne doit pas être autorisé... Ligne 5:suivre les liens symboliques du serveur, comme tout le monde ou presque, je ne vois pas trop, un rapport avec sans doute les liens symboliques unix, mais c'est loin de me concerner du coup... Ligne 6:fixer une adresse pour l'administrateur du site, Cette adresse est visible si on a positionné l'affichage des signatures serveurs à On. Ligne 7:Je fixe le fuseau horaire de mon site, en gros, ça peut servir sur certains calculs de dates, dans le futur, mais comme ça c'est fait. Ligne 8:Autoriser les iclusions de fichiers d'autres serveurs que celui sur lequel on est. Ligne 9:pas question de sécurité ici, juste de jeux de caractères par défaut... Ligne 10:Positionner le language par défaut pour certains types de fichiers (pour voir)
Voyons maintenant comment interdire certaines actions sur certains fichiers avec ces instructions:
### INTERDIRE L'AFFICHAGE DE CERTAINS FORMATS DE FICHIER ### EXÉCUTÉS PAR LE SERVEUR MAIS INTERDIT D'AFFICHAGE PAR LE NAVIGATEUR WEB <Files ~ "\.(inc|class|sql|ini|conf|exe|dll|bin|tpl|bkp|dat|c|h|py|spd|theme|module)$"> deny from all </Files> moi je ne l'utilise pas mais bon Ensuite, voici quelques autres instructions générales concernant cette fois la partie la plus importante et difficile pour moi: Le mode Rewrite
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^mon-site.fr$
RewriteRule ^(.*) http://www.mon-site.fr/$1 [QSA,L,R=301]
Ligne 1: lignes 2 et 3: Ligne 4 et 5: Passons à la suite maintenant, la réécriture proprement dite, conditions et exécution le mieux pour le moment est d'aller voir là
Mon .htaccess actuel:
SetEnv REGISTER_GLOBALS 0
SetEnv PHP_VER 5
ServerSignature Off
Options All -Indexes
Options +FollowSymLinks
#SetEnv SERVER_ADMIN #ne se surcharge pas chez ovh on dirait
SetEnv TZ Europe/Paris
#allow_url_include 0 # déjà présente chez ovh par défaut
AddDefaultCharset UTF-8
AddLanguage fr-FR .html .htm .css .js
<Files .htaccess>
order allow,deny
deny from all
</Files>
#
# mod_rewrite: in use
RewriteEngine On
<ifmodule mod_rewrite.c>
RewriteBase /
RewriteCond %{HTTP_HOST} ^tranquille-informatique.fr$
RewriteRule ^(.*) http://www.tranquille-informatique.fr/$1 [QSA,L,R=301]
###############################################
# On bloque toute une série de failles potentielles
###############################################
#blacklist via query_string:
###############################################
RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini [NC,OR]
RewriteCond %{QUERY_STRING} tag\= [NC,OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig_ [NC,OR]
RewriteCond %{QUERY_STRING} _vti_ [NC,OR]
RewriteCond %{QUERY_STRING} MSOffice [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)(%3C|<)/?script(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)(%3D|=)?javascript(%3A|:)(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)document\.location\.href(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)base64_encode(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\(|\)|<|>|'|"|;|\?|\*).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%22|%27|%3C|%3E|%5C|%7B|%7C).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare|drop).* [NC]
RewriteRule ^(.*)$ - [F,L]
###############################################
# blacklist via http_user_agent:
###############################################
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(HTTrack|clshttp|archiver|loader|email|nikto|miner|python).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|libwww\-perl|curl|wget|harvest|scan|grab|extract).* [NC]
RewriteRule ^(.*)$ - [F,L]
###############################################
#blacklist via HTTP_cookie
###############################################
RewriteCond %{HTTP_COOKIE} ^.*(<|>|'|%0A|%0D|%27|%3C|%3E|%00).* [NC]
RewriteRule ^(.*)$ - [F,L]
###############################################
#blacklist via request_method
###############################################
RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
RewriteRule ^(.*)$ - [F,L]
###############################################
#blacklist via the_request
###############################################
RewriteCond %{THE_REQUEST} ^.*(\\r|\\n|%0A|%0D).* [NC]
RewriteRule ^(.*)$ - [F,L]
###############################################
###############################################
########## Begin - Joomla! core SEF Section
###############################################
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/index.php
RewriteCond %{REQUEST_URI} (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ [NC]
RewriteRule (.*) index.php
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
########## End - Joomla! core SEF Section
###############################################
###############################################
#empêcher les liens directs vers mes images à partir d'autres sites
###############################################
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.tranquille-informatique.fr/.*$ [NC]
ReWriteRule .*\.(gif|png|jpe?g|swf|flv)$ - [F]
###############################################
</ifmodule>
|



