Htaccess et url rewriting pour les nuls (2/2) – Optimisation Serveur et Sécurité

Après un premier article sur l’utilisation du Htaccess pour ce qui concerne l’url rewriting nous allons voir d’autres notions sur ce fichier en ce qui concerne la sécurité par exemple. Comment protéger un peu plus son serveur.

Protéger des dossiers et fichiers

Pour éviter quelques intrusions dans votre serveur il peut être utile de protéger des accès sur des fichiers de configuration ou même des dossiers qui pourraient rediriger vers les statistiques de votre site par exemple.

<files config.php>
Order deny,allow
deny from all
</files>
Ou

ErrorDocument 401 /…/ma_page.html

En indiquant le code d’erreur


  • 401 : Authorization required
  • 403 : Forbidden
  • 404 : Not Found
  • 406 : Request Timed Out
  • 500 : Internal Server Error
  • 503 : Service Unavailable
  • 
    

    Ces quelques lignes toutes simple empêcheront à des visiteurs d’accéder à votre fichier. En théorie il est impossible de voir le contenu du fichier php, mais cela peut être utilisé pour tout autre fichier comme des fichiers de configuration en xml par exemple.

    Protéger un dossier avec un htaccess

    AuthUserFile « /xxx/xxx/.htpasswd »
    AuthName Authentification
    AuthType Basic
    <Limit GET POST>
    require user Utilisateur1
    require user Utilisateur2
    </Limit>

    Ce petit bout de code aura pour but de limiter l’accès à Utilisateur1 et Utilisateur2, pour accéder au dossier ou se trouve le htaccess. Pour les mots de passe ils devront être contenu dans le htpasswd de la forme

    Utilisateur1:IXRs1NmsgJr
    
    

    Qui correspond à Utilisateur:MotdePasseCrypté

    Protéger son serveur des bots, hotlinking et aspirateurs de site

    Il est possible de réduire les risques d’injection sql via les urls de votre site, pour cela quelques règles bien utiles.

    RewriteCond %{REQUEST_METHOD} (GET|POST) [NC] RewriteCond %{QUERY_STRING} ^(.*)(%3C|<)/?script(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)(%3D|=)?javascript(%3A|:)(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)document\.location\.href(.*)$ [OR]
    #the following rules can block some off your url, in case of problem try to suppress them one per one until you solve it
    RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)http%3a(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)ftp(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)ht%20tp(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)htt%20p(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)http%20(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
    RewriteCond %{QUERY_STRING} ^(.*)(%3D|=|%3A|%09)h%20ttp(%3A|:)(/|%2F){2}(.*)$ [NC,OR]
    #end of potential issue rules
    RewriteCond %{QUERY_STRING} ^(.*)base64_encode(.*)$ [OR]
    RewriteCond %{QUERY_STRING} ^(.*)GLOBALS(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
    RewriteCond %{QUERY_STRING} ^(.*)_REQUEST(=|[|%[0-9A-Z]{0,2})(.*)$ [OR]
    RewriteCond %{REQUEST_URI} ^(.*)_vti(.*)$ [OR]
    RewriteCond %{REQUEST_URI} ^(.*)MSOffice(.*)$ [OR]
    RewriteCond %{QUERY_STRING} ^(.*)/etc/passwd(.*)$ [OR]
    RewriteCond %{QUERY_STRING} ^(.*)//(.*)$ [OR]
    RewriteCond %{REQUEST_URI} ^(.*)ShellAdresi.TXT(.*)$ [OR]
    RewriteCond %{REQUEST_URI} ^(.*)\[evil_root\]?(.*)$ [OR]
    RewriteCond %{QUERY_STRING} ^(.*)\.\./\.\./\.\./(.*)$ [OR]
    RewriteCond %{QUERY_STRING} ^(.*)/proc/self/environ(.*)$ [OR] RewriteCond %{QUERY_STRING} ^(.*)(SELECT|INSERT|DELETE|CHAR\(|UPDATE|REPLACE)(.*)$ [NC]

    #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}) [OR]
    # Block out any script that tries to set CONFIG_EXT (com_extcal2 issue)
    RewriteCond %{QUERY_STRING} CONFIG_EXT([|%20|%5B).*= [NC,OR]
    # Block out any script that tries to set sbp or sb_authorname via URL (simpleboard)
    RewriteCond %{QUERY_STRING} sbp(=|%20|%3D) [OR]
    RewriteCond %{QUERY_STRING} sb_authorname(=|%20|%3D)
    # Send all blocked request to homepage with 403 Forbidden error!

     Empecher le hotlinking

    Hotlinking

    RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
    RewriteCond %{HTTP_REFERER} !^$
    RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpe [L]

    Optimisation du serveur

    Grâce à ce fichier htaccess il est aussi possible d’améliorer quelques performances de votre serveur en définissant quelques règles.

    Tout d’abord vous allez mettre en cache tous ces types de fichiers pendant une certaine durée, ce qui permettra au navigateur d’utilisé le c ache et de ne pas faire d’appel au serveur.

    Mise en cache des fichiers

    #requires mod_expires ExpiresActive On
    ExpiresByType text/html « access plus 30 seconds »
    ExpiresByType text/css « access plus 2 weeks »
    ExpiresByType text/javascript « access plus 2 weeks »
    ExpiresByType image/png « access plus 1 month »
    ExpiresByType image/jpg « access plus 1 month »
    ExpiresByType image/jpeg « access plus 1 month » ExpiresByType image/gif « access plus 1 month »

    Etags

    Les Etags ont pour but de signifier au navigateur d’utiliser le cache plutôt qu’interroger le serveur, il arrive certaines fois où il y a des erreurs et la bande passante sera utilisé inutilement. Pour y remédier autant désactiver les Etags avec le code suivant.

    <ifModule mod_headers.c>
      Header unset ETag
    </ifModule>
    FileETag None

    Mod Gzip

    La compression Gzip aura pour but de réduire la taille de vos fichiers qui transite de votre serveur au navigateur. Cela limitera encore la bande passante utilisé pour améliorer les performances globales du site

    <ifModule mod_gzip.c>
      mod_gzip_on Yes
      mod_gzip_dechunk Yes
      mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
      mod_gzip_item_include handler ^cgi-script$
      mod_gzip_item_include mime ^text/.*
      mod_gzip_item_include mime ^application/x-javascript.*
      mod_gzip_item_exclude mime ^image/.*
      mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
    </ifModule>

    Mod Deflate

    Le mod deflate est une variante du mod Gzip concernant la compression à la volée des fichiers.

    <IfModule mod_deflate.c>
    <FilesMatch "\.(js|css)$">
    SetOutputFilter DEFLATE
    </FilesMatch>
    </IfModule>
    Ce contenu a été publié dans Non classé par pierre. Mettez-le en favori avec son permalien.

    Une réflexion au sujet de « Htaccess et url rewriting pour les nuls (2/2) – Optimisation Serveur et Sécurité »

    Laisser un commentaire

    Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    *

    Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>