Sécuriser son WordPress

Quelques infos glanées sur le web sur la sécurité WordPress. Les infos proviennent principalement de :

Le fichier .htaccess

Bloquer le scan d’auteurs

# BEGIN block author scans

RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (author=\d+) [NC]
RewriteRule .* - [F]

# END block author scans

Protéger les fichiers sensibles :

## Block Sensitive Files ##
Options All -Indexes
<files .htaccess>
Order allow,deny
Deny from all
</files>
<files readme.html>
Order allow,deny
Deny from all
</files>
<files license.txt>
Order allow,deny
Deny from all
</files>
<files install.php>
Order allow,deny
Deny from all
</files>
<files wp-config.php>
Order allow,deny
Deny from all
</files>
<files error_log>
Order allow,deny
Deny from all
</files>
<files fantastico_fileslist.txt>
Order allow,deny
Deny from all
</files>
<files fantversion.php>
Order allow,deny
Deny from all
</files>

Protéger le dossier wp-includes

Les fichiers n’étant destinés qu’à être inclus par d’autres scripts, on peut désactiver leur accès direct :

RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]

à noter que cela peut poser quelques soucis en multisite. Dans ce cas il faut supprimer la ligne

RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]

Afin de ne pas empêcher le fichier ms-files.php de générer des images.

Bloquer la navigation dans les répertoires

Si le serveur est mal configuré, il est possible de lister le contenu de répertoires ne contenant pas de fichier d’index. Dans ce cas rajouter dans le .htaccess

Options All -Indexes

Désactiver la signature du serveur

ServerSignature Off

Bloquer certains bots qui n’ont pas de user-agent

Il est possible d’empêcher certains bots qui n’ont pas de user-agent d’ajouter des commentaires :

## Protect from spam bots ##
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.yourwebsite.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
</IfModule>

il faut évidemment personnaliser yourwebsite.com

Limiter les attaques par injection SQL

Attention : après test, il semble que les lignes ci-dessous ne fonctionnent pas… Je chercherai pourquoi quand j’ai 5mn 😉

## SQL Injection Block ##
 <IfModule mod_rewrite.c>
 RewriteBase /
 RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC]
 RewriteRule ^(.*)$ - [F,L]
 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} (\|%3E) [NC,OR]
 RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR]
 RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
 RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)||ê|"|;|\?|\*|=$).* [NC,OR]
 RewriteCond %{QUERY_STRING} ^.*("|'|<|>|\|{||).* [NC,OR]
 RewriteCond %{QUERY_STRING} ^.*(%24&x).* [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).* [NC]
 RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$
 RewriteRule ^(.*)$ - [F,L]
 </IfModule>

Extensions de protection

Les extensions de base à installer :

  • Captcha : permet d’ajouter un captcha mathématique comme protection
  • Limit Login Attempts : permet de bloquer les attaques par force brute

Quelques plugins permettant de vérifier la sécurité de votre WordPress :

D’autres plugins :

Ne pas utiliser « admin » comme login

Si possible le configurer lors de l’installation. Si le blog est déjà installé, on peut le modifier via phpMyAdmin. Dans la table wp_users simplement modifier le champ user_login de l’administrateur et trouver un login différent.

Ajouter des clés de sécurité

Elles se trouvent dans le fichier wp_config.php et peuvent être générées via l’url http://api.wordpress.org/secret-key/1.1/

Un autre conseil est de les changer régulièrement…

Masquer la version de wordpress

Supprimer la balise meta generator

Editer le fichier functions.php du thème et insérer :

1
<?php remove_action('wp_head', 'wp_generator'); ?>

Si la balise meta est toujours présente, suprrimer la ligne suivante de votre thème (header.php)

1
<meta name=”generator” content=”WordPress <?php bloginfo('version'); ?>” />

Supprimer le fichier readme.html

Il se trouve à la racine du blog et contient le numéro de version

Détecter les modifications de fichier

La détection de la modification de fichiers WordPress permet de prévenir un hack de fichiers qui serait non détectable au premier abord. Plusieurs pistes à étudier :

  • inotify-tools si on a la main sur le serveur
  • OSSEC, un service open source de monitoring

Désactiver l’édition de fichiers

Rajouter dans wp-config.php

1
define('DISALLOW_FILE_EDIT', true);

Base de données

Changer le préfixe de votre base de données (peut-être fait via le plugin WP Security Scan)

 

Mots-clefs : ,



Laisser une réponse

Vous devez être connecté pour publier un commentaire.