Petit rappel pour rejoindre la plateforme Slack Wordpress Francophone : slack-invitation    Vous avez raté le lien !   deuxième tentative slack-invitation....

LA SECURITE

PAS DE PANIQUE

BASIC

THEMES AND PLUGINS(extensions)

NB Si vous n'utilisez pas une extension ou un theme => supprimez-les

SERVEUR

Points à juger :

BACKUPS(sauvegardes)

On ne dira jamais assez FAITES DES sauvegardes

Mon truc à moi :
Je crée une dropbox dédiée au site sur laquelle je sauve images, fichiers site, base de donnée, et qui est liée avec une sauvegarde automatique

WORDPRESS

Wordpress est gratuit et en open source

DONC populaire ET tentant pour les hackers

Pourquoi me hacker ?

On peut distinguer 3 types de pirates

UPDATE UPDATE UPDATE

Les Updates mineurs sont faites automatiquement depuis la version 2.7.
Par contre, les majeurs attendent toujours votre clic !!

Updater, c'est combler ses failles dans le systeme et surtout fermer la porte aux pirates qui connaissent désormais les failles décelées !
Car lorsqu'un update est publié, les problèmes de sécurité sont mentionnés pour les anciennes versions.
=> facile pour les pirates d'utiliser l'info.

Instructions de mise à jour manuelle CODEX

Avant de commencer:

Après de nombreuses recherche sur les forums

Cacher le numéro de version wp ne semble pas servir à grand chose car les attaques ciblent wordpress dans son ensemble
mais si vous voulez le faire quand même
Utiliser pour cela le fichier function.php (présent dans /wp-content/themes/Votre-Theme-enfant)

remove_action("wp_head", "wp_generator");

On peut également empêcher le flux RSS d’afficher la version WordPress avec la fonction suivante:

function wpt_remove_version() {
return ''; 
}
add_filter('the_generator', 'wpt_remove_version');

supprimer aussi:

readme.html => qui indique le numéro de version wp

BDD PREFIX

Le prefix de la base de donnée est par défaut wp_
pour empecher certaines attaques de script, il est préférable de changer ce préfix lors de la création du site.
Evitez wp1, wpa ou tout autre préfix commençant par wp

tuto de Tony Archambeau pour changer le prefix,
=> attention, toute action sur la BDD est risquée, prenez vos précautions, backup, test en local etc…

ADMIN NAME

Les attaques BRUTFORCE

Ce sont de petits programmes/scripts qui cherchent le password
car il n'y a pas de limit à la combinaison de connexions sur Wordpress
et si vous laissez le login Admin

y'a qu'à pour le password …..

Ne pas utiliser :

utiliser un générateur de mot de passe
une phrase “coucoumarchesuisdemain”

cap, minuscule et symbole (< >)

Gerer les droits utilisateurs

Qui fait quoi !!??
Si vous partagez l'admin
peut-être pouvez vous empecher d'éditer directement du site dans config.php

define('DISALLOW_FILE_EDIT',true);

Mon truc à moi :
Je recrée un utilisateur administrateur après plusieurs création d'utilisateurs lambdas afin que l'admin n'ai pas l'ID n°1 dans la BDD.

PLUGINS

Même chose que pour les themes, vérifiés l'historique, les updates etc

ceux qui peuvent vous aider :

HTACCESS

Comme le dit si bien OVH, le fichier .htacces est le couteau suisse d’Apache.

Apache.org - Tutoriel du serveur HTTP Apache : fichiers .htaccess

Pour comprendre le charabia du .htaccess généré automatiquement par WordPress (après toute modification des permaliens) : cliquez ici

Pour empecher l'acces au dossier

Options -Indexes

Pour bloquer l'accés au wp-config.php

et empêcher la lecture de ce fichier via Apache.
Editez (ou créez) le fichier .htaccess qui se trouve à la racine du répertoire de WordPress et ajoutez-y les lignes suivantes :

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

<Files wp-config.php>
order allow, deny
deny from all
</Files>

Whitelister c'est autorisé l'accés qu'à certain IP

<LIMIT GET>
order deny,allow
deny from all
# whitelist Robert's IP address
allow from xx.xx.xx.xxx
# whitelist David's IP address
allow from xx.xx.xx.xxx
# whitelist Amanda's IP address
allow from xx.xx.xx.xxx
# whitelist Jean's IP address
allow from xx.xx.xx.xxx
# whitelist Work IP address
allow from xx.xx.xx.xxx
</LIMIT>

Remplacez xx.xx.xx.xxx avec votre adresse IP.
Si vous utilisez plus d'une adresse pour acceder à votre site, ajoutez-les aussi.

Blacklister c'est refusé l'accés à certain IP

<Limit GET POST>
order allow, deny
deny from 203.023.24.1
deny from xx.xx.xx.xxx
allow from all
</Limit>

Remplacez xx.xx.xx.xxx avec l'adresse IP que vous voulez bloquer.

Refuser l'acces à htaccess

# STRONG HTACCESS PROTECTION
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>

Password Protect Login

codex

Mon truc à moi
mon fichier type

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

#Interdire la lecture du contenu des dossiers
Options All -Indexes

# PROTECT wpconfig.php
<FilesMatch ^wp-config.php$>
deny from all
</FilesMatch>

Pour en savoir plus sur le fichier original .htaccess

LE CODE .HTACCESS

Source article

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Voila ce qu'il signifie en détail…

# BEGIN WordPress
# END WordPress

De simples commentaires signalant le début et la fin du code de réécriture d'URL.

<IfModule mod_rewrite.c> </IfModule>

Expression conditionnelle: le code inclu entre ces deux balises est exécuté seulement si l'URL rewritting est permise par l'hébergeur et dans ce cas le module mod_rewrite doit être disponible.

RewriteEngine On

Active le moteur de réécriture d'URL.

RewriteBase /

Indique explicitement que la racine du site est “/”, ce qui n'est pas le cas par défaut pour la plupart des hébergements Unix: la base du site est l'emplacement des fichiers, quelque chose comme /home/utilisateur/www/. Cette directive introduit une différence entre PHP et le serveur: pour PHP, la racine reste l'emplacement du répertoire et il faut utiliser les variables PHP pour connaître la racine du site (voir le script Bioloide pour une application pratique).
La base étant ainsi définie, on peut utiliser dans les pages des adresses relatives comme par exemple /mapage.html.

RewriteCond %{REQUEST_FILENAME} !-f

Une précondition pour la directive qui suivra. Elle empêche la redirection automatique sur index.php, ce qui est le cas par défaut, lorsque l'URL correspond à un fichier réel. REQUEST_FILENAME est une variable Apache qui représente le chemin réel dans le système de fichier sur le serveur.

Donc la condition exclut les URL correspondant à un fichier réel sur le site, tandis que:

RewriteCond %{REQUEST_FILENAME} !-d

exclut les sous-répertoires.

RewriteRule . /index.php [L]

La commande RewriteRule demande le remplacement de l'expression régulière, en l'occurence un point, par l'adresse /index.php (sauf si c'est un fichier ou répertoire réels).
Le point représentant tout caractère ou séquence de caractère, toute URL est redirigée sur index.php.
[] ajoute une règle pour le serveur.
L signifie Last, la règle est la dernière à être appliquée.
Ainsi la règle complète redirige toutes les URLs sur /index.php sauf si elles correspondent à des fichiers ou répertoires réels.

Sources

Instructions de mise à jour manuelle-CODEX
tuto de Tony Archambeau pour changer le prefix bdd
OVH - astuce_htaccess
Apache.org - Tutoriel du serveur HTTP Apache : fichiers .htaccess
9-most-useful-htaccess-tricks-for-wordpress/
securisation-de-votre-site-wordpress