mardi 18 juin 2013

Sécurité serveur + htaccess

.htaccess = Un bon moyen de sécuriser votre serveur en amont.


Pour ceux qui l'ignore, apache va chercher la présence d'un fichier .htaccess à chaque fois qu'une page va être demandée.
Et plutôt que de mettre des séries de tests en php qui vont utiliser des ressources serveur, il est recommandé de filtrer un maximum en amont.

Le code ci-dessous est assez générique et peut être utilisé dans la plupart des cas.
Prenez quand même soin de l'adapter et de ne pas faire un simple copié collé !
Pour ma part je conseil de le placer dans un fichier .htaccess, à la racine du site. Mais rien ne vous empêche de le placer dans le fichier de configuration de Apache (pratique si vous avez plusieurs sites à gérer).

J'avoue avoir construit ce code à l'aide de plusieurs sites et tuto trouvés sur internet, j'ai d'ailleurs pris soin de garder les commentaires
# explicitly disable caching for scripts and other dynamic files
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi)$quot;>
Header unset Cache-Control
</FilesMatch>

RewriteEngine On

# proc/self/environ? no way!
RewriteCond %{QUERY_STRING} proc/self/environ [OR]

# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]

# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]

# Block out any script that includes a <script> tag in URL
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]

# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|\%[0-9A-Z]{0,2}) [OR]

# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|\%[0-9A-Z]{0,2})

# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.html [F,L]

# secure htaccess file
<Files .htaccess>
order allow,deny
deny from all
</Files>

# prevent viewing of a specific file
<Files secretfile.jpg>
order allow,deny
deny from all
</Files>

# multiple file types
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$quot;>
Order Allow,Deny
Deny from all
</FilesMatch>

# disable directory browsing
Options All -Indexes

# block visitors referred from indicated domains
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_REFERER} scumbag.com [NC,OR]
RewriteCond %{HTTP_REFERER} wormhole.com [NC,OR]
RewriteRule .* - [F]
</ifModule>

# ON empeche lister dossier SVN
<Directory ~ "\.svn">
Order allow,deny
Deny from all
</Directory>


Et voilà, un petit service httpd restart pour redémarrer le serveur apache et c'est gagné.