web-dev-qa-db-fra.com

Sécurisation du dossier wp-admin - But? Importance?

J'essaie de comprendre comment sécuriser un site WordPress. Une tâche de sécurité que je ne comprends pas est ... Quelle est l’importance de protéger le "dossier wp-admin"? Par exemple, je considérerais que limiter le nombre de tentatives de connexion est très important.

Quel est le but de la protection du dossier wp-admin? Est-ce pour empêcher un pirate d'entrer dans votre tableau de bord WordPress? Mais si vous protégez wp-login.php, comment un pirate informatique pourrait-il même entrer dans le tableau de bord?

<Files wp-login.php>
order deny,allow
deny from all
allow from xxx.xxx.x.x
</Files>

Si vous utilisez le "Code A", devrez-vous également ajouter à la liste blanche les fonctionnalités de l'interface AJAX et installer.css?

"Code A" - Limiter l'accès au dossier wp-admin

AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "WordPress Admin Access Control"
AuthType Basic
<LIMIT GET>
order deny,allow
deny from all
allow from xx.xx.xx.xxx
</LIMIT>

.
.
Comment "Code A" se compare-t-il à "Code B"? Voulez-vous utiliser l'un ou l'autre, ou les deux en même temps?
.

"Code B" - Sécurisation du répertoire wp-admin

1   # enable basic authentication
2   AuthType Basic
3   # this text is displayed in the login dialog
4   AuthName “Restricted Area”
5   # The absolute path of the Apache htpasswd file. You should edit this
6   AuthUserFile /path/to/.htpasswd
7   # Allows any user in the .htpasswd file to access the directory
8   require valid-user




Allow front end Ajax functionality


Some WordPress plugins use Ajax functionality in WordPress.  
This means that such plugins might need access to the file admin-ajax.php  
To allow anonymous access to such file for the WordPress plugins to function,  
add the below to .htaccess  

1   <Files admin-ajax.php>
2       Order allow,deny
3       Allow from all
4       Satisfy any
5   </Files>



Update: /wp-admin/css/install.css is also sometimes needed on the frontend,  
you should whitelist that as well. Here's the necessary configuration 
to whitelist a file in a password protected location in lighttpd:


$HTTP["url"] =~ "^\/wp-admin\/.*" {
    $HTTP["url"] !~ "^\/wp-admin\/(admin-ajax\.php|css\/.*)" {
        auth.require = (
            "" => (
                "method" => "basic",
                "realm" => "Password protected area",
                "require" => "user=theuser",
            ),
        ),
    },
},
4
leko

Mais si vous protégez wp-login.php, comment un pirate informatique pourrait-il entrer dans le tableau de bord de toute façon?

Un attaquant pourrait essayer de pirater ou de forger un cookie d'authentification valide. Récemment, une faille potentielle a facilité la création d'un tel cookie: CVE-2014-0166 Elle a été corrigée avec la version 3.7.3/3.8.3

Comment "Code A" se compare-t-il à "Code B"? Voulez-vous utiliser l'un ou l'autre, ou les deux en même temps?

Si vous ajoutez la valeur wp-admin/admin-ajax.php à la liste blanche (comme dans "Code B"), ce script pourrait toujours servir de point de contact pour permettre à un attaquant de vérifier sa falsification de cookie et, en cas de succès, de manipuler les données pour chaque action ajax non sécurisée. par un nonce supplémentaire. Mais même ceux-ci pourraient, théoriquement, être devinés.

Toutefois, si vous n'avez pas besoin de la fonctionnalité AJAX pour le public et que vous avez la possibilité de répertorier toutes les adresses IP de tous vos comptes, la sécurisation du répertoire wp-admin/ réduirait les risques d'attaque tels que décrits ci-dessus.

Toutefois, ces méthodes ne protègent pas votre site contre les attaques d'interception ou les attaques d'ordinateurs clients infectés, car ceux-ci passeraient le contrôle de la liste blanche.

Enfin, laissez-moi vous donner un classement personnel à votre première question:

Quelle est l’importance de protéger le "dossier wp-admin"?

À mon avis, il est plus important d'utiliser des mots de passe sûrs (peut-être une authentification à deux facteurs), des clés secrètes sûres (sels dans wp-config.php) et, si possible, toujours une connexion https lorsque vous administrez votre WordPress, à partir de la première requête (request https://…/wp-login.php). . Maintenez également tous les composants à jour et supprimez les composants inutilisés (plug-in/thème) du serveur. Après cela, vous pouvez toujours envisager de protéger le répertoire wp-admin.

4
David