Vous êtes ici : » Accueil» Apache » Apache: Plus de sécurité pour les sites WordPress (htaccess)

Apache: Plus de sécurité pour les sites WordPress (htaccess)

(Dernière mise à jour le: 23 septembre 2021)

Le fichier htaccess est un fichier de site Web puissant qui contrôle la configuration de votre site Web de haut niveau. Sur des serveurs qui exécutent Apache (un logiciel serveur Web),  Le fichier htaccess vous permet de modifier la configuration de votre site Web WordPress sans avoir à éditer les fichiers de configuration du serveur.

Utilisations courantes du fichier .htaccess

Il existe plusieurs cas d’utilisation du fichier .htaccess. Les exemples les plus courants incluent:

  • Ajouter des redirections pour certaines URL
  • Charger des pages d’erreur personnalisées, comme 404 pages
  • Forcer votre site à utiliser HTTPS au lieu de HTTP
  • Protégez par mot de passe certains répertoires de votre serveur
  • Empêcher le hotlinking

L’utilisation de fichiers .htaccess est un outil puissant pour gérer votre serveur, mais cela peut être délicat. Assurez-vous que vous êtes familiarisé avec les modifications apportées à votre serveur avant de commencer à modifier les fichiers .htaccess.

Remarque: avant d’essayer l’une des choses décrites dans ce guide, nous vous recommandons fortement de faire une sauvegarde du fichier .htaccess et de l’ensemble de votre site Web WordPress (comme avec un plugin de sauvegarde WordPress comme BackupBuddy). Si vous n’êtes pas à l’aise pour apporter des modifications à votre fichier .htaccess, vous devrez peut-être contacter un développeur de site Web.

Utilisation de plusieurs fichiers .htaccess

Vous pouvez appliquer différents paramètres à différents répertoires sur votre serveur en utilisant plusieurs fichiers .htaccess. Vous pouvez, en théorie, créer un fichier .htaccess dans n’importe quel répertoire de votre serveur en créant et en téléchargeant un fichier texte brut.

Voici quelques points à garder à l’esprit:

En règle générale, vous souhaitez réduire le nombre de fichiers .htaccess sur votre serveur car trop de configurations peuvent ralentir votre serveur.

Lorsque votre serveur voit un fichier .htaccess dans un répertoire, il recherche également des fichiers .htaccess dans tous les répertoires parents, augmentant ainsi l’utilisation des ressources du serveur.
Les fichiers  .htaccess situés plus haut dans le chemin du fichier ont toujours la priorité.

# Fichier spécialement conçu pour les sites WordPress 
#----------------------------------------------------------------
# BLOCK WP FILE ACCESS
# Bloquer l'accès aux fichiers de WordPress 
#----------------------------------------------------------------
<Files license.txt>
   <IfModule mod_authz_core.c>
      Require all denied
   </IfModule>
   <IfModule !mod_authz_core.c>
      Order deny,allow
      Deny from all
   </IfModule>
</Files>
<Files wp-config-sample.php>
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
      Order deny,allow
      Deny from all
    </IfModule>
</Files>
<Files readme.html>
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
</Files>
# ---------------------------------------------------------------
# BASIC HTACCESS RULES 
# Les règles basique de htaccess: ceci interdit l'accès au fichier
# htaccess.
#----------------------------------------------------------------
<Files .htaccess>
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
</Files>
ServerSignature Off
LimitRequestBody 10485760
<Files wp-config.php>
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
</Files>
#----------------------------------------------------------------
# DEBUG LOG BLOCK HTACCESS RULES
#----------------------------------------------------------------
<Files debug.log>
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
</Files>
#----------------------------------------------------------------
# DISABLE INDEX VIEWS
# Déactiver l'affichage automatique l'arborésance des dossiers
# en l'absence du fichier index.php ou index.html 
#----------------------------------------------------------------
Options -Indexes
#----------------------------------------------------------------
# USER AGENT BLACKLIST
# Filtre les "User-Agent"
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
    RewriteEngine On
    	RewriteCond %{HTTP_USER_AGENT} ^SquigglebotBot [NC,OR]
    	RewriteCond %{HTTP_USER_AGENT} ^SurveyBot [NC,OR]
    	RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [NC,OR]
    	RewriteCond %{HTTP_USER_AGENT} ^YottaShopping_Bo [NC,OR]
    	RewriteCond %{HTTP_USER_AGENT} ^baiduspider [NC,OR]
    	RewriteCond %{HTTP_USER_AGENT} ^bezeqint\.net [NC,OR]
    	RewriteCond %{HTTP_USER_AGENT} ^cellcom\.co\.il [NC,OR]
    	RewriteCond %{HTTP_USER_AGENT} ^webcrawl\.net [NC]
      RewriteRule ^(.*)$ - [F,L]
</IfModule>
#----------------------------------------------------------------
# DISABLE TRACE TRACK
# Désactiver la dépistage 
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
      RewriteEngine On
    	RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
      RewriteRule .* - [F]
</IfModule>
#----------------------------------------------------------------
# FORBID PROXY COMMENTS
# Interdire les commentaires des proxy
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
      RewriteEngine On
    	RewriteCond %{REQUEST_METHOD} ^POST
    	RewriteCond %{HTTP:VIA} !^$ [OR]
    	RewriteCond %{HTTP:FORWARDED} !^$ [OR]
    	RewriteCond %{HTTP:USERAGENT_VIA} !^$ [OR]
    	RewriteCond %{HTTP:X_FORWARDED_FOR} !^$ [OR]
    	RewriteCond %{HTTP:X_FORWARDED_HOST} !^$ [OR]
    	RewriteCond %{HTTP:PROXY_CONNECTION} !^$ [OR]
    	RewriteCond %{HTTP:XPROXY_CONNECTION} !^$ [OR]
    	RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR]
    	RewriteCond %{HTTP:HTTP_CLIENT_IP} !^$
      RewriteRule wp-comments-post\.php - [F]
</IfModule>
#----------------------------------------------------------------
# DENY BAD QUERY STRINGS
# Refuser les mauvaises chaînes de caractères dans les requêtes
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
  RewriteEngine On
	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} ^.*(globals|encode|localhost|loopback).* [NC,OR]
	RewriteCond %{QUERY_STRING} (\;|'|\"|%22).*(request|insert|union|declare|drop) [NC]
  RewriteRule ^(.*)$ - [F,L]
</IfModule>
#----------------------------------------------------------------
# ADVANCED CHAR STRING FILTER
# Filtre avancé pour interdir certains caratctères
#----------------------------------------------------------------
<IfModule mod_alias.c>
	RedirectMatch 403 \,
	RedirectMatch 403 \:
	RedirectMatch 403 \;
	RedirectMatch 403 \=
	RedirectMatch 403 \[
	RedirectMatch 403 \]
	RedirectMatch 403 \^
	RedirectMatch 403 \`
	RedirectMatch 403 \{
	RedirectMatch 403 \}
	RedirectMatch 403 \~
	RedirectMatch 403 \"
	RedirectMatch 403 \$
	RedirectMatch 403 \<
	RedirectMatch 403 \>
	RedirectMatch 403 \|
	RedirectMatch 403 \.\.
	RedirectMatch 403 \%0
	RedirectMatch 403 \%A
	RedirectMatch 403 \%B
	RedirectMatch 403 \%C
	RedirectMatch 403 \%D
	RedirectMatch 403 \%E
	RedirectMatch 403 \%F
	RedirectMatch 403 \%22
	RedirectMatch 403 \%27
	RedirectMatch 403 \%28
	RedirectMatch 403 \%29
	RedirectMatch 403 \%3C
	RedirectMatch 403 \%3E
	RedirectMatch 403 \%3F
	RedirectMatch 403 \%5B
	RedirectMatch 403 \%5C
	RedirectMatch 403 \%5D
	RedirectMatch 403 \%7B
	RedirectMatch 403 \%7C
	RedirectMatch 403 \%7D
#----------------------------------------------------------------
# COMMON PATTERNS
# Modèles communs
#----------------------------------------------------------------
	RedirectMatch 403 \_vpi
	RedirectMatch 403 \.inc
	RedirectMatch 403 xAou6
	RedirectMatch 403 db\_name
	RedirectMatch 403 select\(
	RedirectMatch 403 convert\(
	RedirectMatch 403 \/query\/
	RedirectMatch 403 ImpEvData
	RedirectMatch 403 \.XMLHTTP
	RedirectMatch 403 proxydeny
	RedirectMatch 403 function\.
	RedirectMatch 403 remoteFile
	RedirectMatch 403 servername
	RedirectMatch 403 \&rptmode\=
	RedirectMatch 403 sys\_cpanel
	RedirectMatch 403 db\_connect
	RedirectMatch 403 doeditconfig
	RedirectMatch 403 check\_proxy
	RedirectMatch 403 system\_user
	RedirectMatch 403 \/\(null\)\/
	RedirectMatch 403 clientrequest
	RedirectMatch 403 option\_value
	RedirectMatch 403 ref\.outcontrol
#----------------------------------------------------------------
# SPECIFIC EXPLOITS
# Exploits spécifiques
#----------------------------------------------------------------
	RedirectMatch 403 errors\.
	RedirectMatch 403 config\.
	RedirectMatch 403 include\.
	RedirectMatch 403 display\.
	RedirectMatch 403 register\.
	RedirectMatch 403 password\.
	RedirectMatch 403 maincore\.
	RedirectMatch 403 authorize\.
	RedirectMatch 403 macromates\.
	RedirectMatch 403 head\_auth\.
	RedirectMatch 403 submit\_links\.
	RedirectMatch 403 change\_action\.
	RedirectMatch 403 com\_facileforms\/
	RedirectMatch 403 admin\_db\_utilities\.
	RedirectMatch 403 admin\.webring\.docs\.
	RedirectMatch 403 Table\/Latest\/index\.
</IfModule>
#----------------------------------------------------------------
# 6G FIREWALL/BLACKLIST
# Pare-feu 6g / liste noire
# @ https://perishablepress.com/6g/
#
# 6G:[CHAÎNE DE REQUÊTE]
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
RewriteEngine On
	RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
	RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR]
	RewriteCond %{QUERY_STRING} ([a-z0-9]{2000,}) [NC,OR]
	RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR]
	RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR]
	RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR]
	RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR]
	RewriteCond %{QUERY_STRING} (\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR]
	RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
	RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR]
	RewriteCond %{QUERY_STRING} ('|\")(.*)(drop|insert|md5|select|union) [NC]
RewriteRule .* - [F]
</IfModule>
#----------------------------------------------------------------
# 6G:[METHODES DE REQUÊTES]
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
	RewriteCond %{REQUEST_METHOD} ^(connect|debug|move|put|trace|track) [NC]
RewriteRule .* - [F]
</IfModule>
#----------------------------------------------------------------
# 6G:[Référencier]
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
	RewriteCond %{HTTP_REFERER} ([a-z0-9]{2000,}) [NC,OR]
	RewriteCond %{HTTP_REFERER} (semalt.com|todaperfeita) [NC]
RewriteRule .* - [F]
</IfModule>
#----------------------------------------------------------------
# 6G:[CHAÎNE DE REQUÊTE]
#----------------------------------------------------------------
<IfModule mod_alias.c>
	RedirectMatch 403 (?i)([a-z0-9]{2000,})
	RedirectMatch 403 (?i)(https?|ftp|php):/
	RedirectMatch 403 (?i)(base64_encode)(.*)(\()
	RedirectMatch 403 (?i)(=\'|=\%27|/\'/?)\.
	RedirectMatch 403 (?i)/(\$(\&)?|\*|\"|\.|,|&|&?)/?$
	RedirectMatch 403 (?i)(\{0\}|\(/\(|\.\.\.|\+\+\+|\\"\\")
	RedirectMatch 403 (?i)(~|`|<|>|:|;|,|%|\|\s|\{|\}|\[|\]|\|)
	RedirectMatch 403 (?i)/(=|\$&|_mm|cgi-|etc/passwd|muieblack)
	RedirectMatch 403 (?i)(&pws=0|_vti_|\(null\)|\{\$itemURL\}|echo(.*)kae|etc/passwd|eval\(|self/environ)
	RedirectMatch 403 (?i)\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$
	RedirectMatch 403 (?i)/(^$|(wp-)?config|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\.php
</IfModule>
#----------------------------------------------------------------
# 6G:[USER AGENTS]
#----------------------------------------------------------------
<IfModule mod_setenvif.c>
SetEnvIfNoCase User-Agent ([a-z0-9]{2000,}) bad_bot
SetEnvIfNoCase User-Agent (archive.org|binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e|harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl|python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune) bad_bot

# Apache < 2.3
#---------------
<IfModule !mod_authz_core.c>
    Order Allow,Deny
    Allow from all
    Deny from env=bad_bot
</IfModule>

# Apache >= 2.3
# -------------
    <IfModule mod_authz_core.c>
         <RequireAll>
             Require all Granted
             Require not env bad_bot
         </RequireAll>
    </IfModule>
</IfModule>
#----------------------------------------------------------------
# 5G BLACKLIST/FIREWALL (2013)
# @ http://perishablepress.com/5g-blacklist-2013/
#----------------------------------------------------------------
# 5G:[QUERY STRINGS]
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
	RewriteCond %{QUERY_STRING} (\"|%22).*(<|>|%3) [NC,OR]
	RewriteCond %{QUERY_STRING} (javascript:).*(\;) [NC,OR]
	RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3) [NC,OR]
	RewriteCond %{QUERY_STRING} (\\|\.\./|`|='$|=%27$) [NC,OR]
	RewriteCond %{QUERY_STRING} (\;|'|\"|%22).*(union|select|insert|drop|update|md5|benchmark|or|and|if) [NC,OR]
	RewriteCond %{QUERY_STRING} (base64_encode|localhost|mosconfig) [NC,OR]
	RewriteCond %{QUERY_STRING} (boot\.ini|echo.*kae|etc/passwd) [NC,OR]
	RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC]
  RewriteRule .* - [F]
</IfModule>
#----------------------------------------------------------------
# 5G:[USER AGENTS]
#----------------------------------------------------------------
<IfModule mod_setenvif.c>
#------------------------------------------------------------
   # SetEnvIfNoCase User-Agent ^$ keep_out
   # Cette ligne va définir la variable d'environnement keep_out avec l'une
   # des valeurs citée dans la table ci-dessous si le champ d'en-tête de requête
   # User-Agent: est présent et contient une ou une autre combinaison des mêmes
   # caractères, sans tenir compte de la casse.
   #------------------------------------------------------------
    SetEnvIfNoCase User-Agent (ZoominfoBot|ptalebot|binlar|casper|cmsworldmap|comodo|diavol|dotbot|feedfinder|flicky|ia_archiver|jakarta|kmccrew|nutch|planetwork|purebot|pycurl|skygrid|sucker|turnit|vikspider|zmeu) keep_out
        <limit GET POST PUT>
              Order Allow,Deny
              Allow from all
              Deny from env=keep_out
        </limit>
</IfModule>
#----------------------------------------------------------------
# 5G:[REQUEST STRINGS]
#----------------------------------------------------------------
<IfModule mod_alias.c>
	RedirectMatch 403 (https?|ftp|php)\://
	RedirectMatch 403 /(https?|ima|ucp)/
	RedirectMatch 403 /(Permanent|Better)$
	RedirectMatch 403 (\=\\\'|\=\\%27|/\\\'/?|\)\.css\()$
	RedirectMatch 403 (\,|\)\+|/\,/|\{0\}|\(/\(|\.\.\.|\+\+\+|\||\\\"\\\")
	RedirectMatch 403 \.(cgi|asp|aspx|cfg|dll|exe|jsp|mdb|sql|ini|rar)$
	RedirectMatch 403 /(contac|fpw|install|pingserver|register)\.php$
	RedirectMatch 403 (base64|crossdomain|localhost|wwwroot|e107\_)
	RedirectMatch 403 (eval\(|\_vti\_|\(null\)|echo.*kae|config\.xml)
	RedirectMatch 403 \.well\-known/host\-meta
	RedirectMatch 403 /function\.array\-rand
	RedirectMatch 403 \)\;\$\(this\)\.html\(
	RedirectMatch 403 proc/self/environ
	RedirectMatch 403 msnbot\.htm\)\.\_
	RedirectMatch 403 /ref\.outcontrol
	RedirectMatch 403 com\_cropimage
	RedirectMatch 403 indonesia\.htm
	RedirectMatch 403 \{\$itemURL\}
	RedirectMatch 403 function\(\)
	RedirectMatch 403 labels\.rdf
	RedirectMatch 403 /playing.php
	RedirectMatch 403 muieblackcat
</IfModule>
#----------------------------------------------------------------
# 5G:[REQUEST METHOD]
#----------------------------------------------------------------
<ifModule mod_rewrite.c>
	  RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
    RewriteRule .* - [F]
</IfModule>
#----------------------------------------------------------------
# BLOCK SPAMBOTS START
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
  RewriteEngine On
	RewriteCond %{REQUEST_METHOD} POST
	RewriteCond %{REQUEST_URI} ^(.*)?wp-comments-post\.php(.*)$
	RewriteCond %{HTTP_REFERER} !^http(s)?://(.*)?\.milbako\.com/mbk [NC,OR]
	RewriteCond %{HTTP_USER_AGENT} ^$
  RewriteRule .* http://127.0.0.1 [L]
</IfModule>
#----------------------------------------------------------------
# PREVENT IMAGE HOTLINKS 
# Empêcher les hotlinks d'image: 
# Malheureusement, pour les personnes dont les images ont été liées 
# par d'autres sites Web, elles remarqueront probablement une augmentation
# de l'utilisation des ressources de leur serveur, car le nouveau site
# utilisant ces images utilisera les ressources de votre serveur.
# Heureusement, vous pouvez éviter cela en activant la protection par hotlink
# sur votre site. Voici comment suivre le processus d'activation de la protection
# par hotlink sur votre site.
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
RewriteEngine On
	RewriteCond %{HTTP_REFERER} !^$
	RewriteCond %{REQUEST_FILENAME} -f
	RewriteCond %{REQUEST_FILENAME} \.(gif|jpe?g?|png)$ [NC]
	RewriteCond %{HTTP_REFERER} !^http(s)?://(.*)?\.milbako\.com/mbk [NC]
  RewriteRule \.(gif|jpe?g?|png)$ - [F,NC,L]
</IfModule>
#----------------------------------------------------------------
# BEGIN WordPress
# Les directives (lignes) entre « BEGIN WordPress » et « END WordPress » sont générées
# dynamiquement, et doivent être modifiées uniquement via les filtres WordPress.
# Toute modification des directives situées entre ces marqueurs sera surchargée.
#----------------------------------------------------------------
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /mbk/
RewriteRule ^index\.php$ - [L]
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /mbk/index.php [L]
</IfModule>
#----------------------------------------------------------------
# END WordPress
#----------------------------------------------------------------

Sécurisez et protégez votre site Web WordPress

Chaque site Web WordPress a besoin d’une solide stratégie de sauvegarde et de sécurité. Avec BackupBuddy, notre plugin de sauvegarde WordPress, et iThemes Security Pro, notre plugin de sécurité WordPress, vous bénéficiez de sauvegardes et de sécurité… plus la tranquillité d’esprit que votre contenu est en sécurité.

Laisser un commentaire

Translate »