web-dev-qa-db-fra.com

Comment déplacer la page de connexion wp-admin vers un autre emplacement?

Cela peut être une autre couche de sécurité.

1
user931

Vous pouvez désactiver la page wp-login de vos fonctions en vous connectant à login_head:

add_action( 'login_head', 'wp_die');

(C'est évidemment une façon très maladroite de le faire, mais cela empêche quiconque de pouvoir se connecter via cette page. Vous pouvez en faire une fonction de redirection, ou un message d'avertissement, plutôt que simplement un dé.)

Et copiez le fichier wp-login existant vers un autre emplacement, en veillant à mettre à jour le chemin relatif vers wp-load.php près du sommet (ainsi que tout autre chemin relatif pouvant s'y trouver, y compris les liens vers lui-même et les actions de formulaire.

(Vous devrez évidemment supprimer l'action que vous avez ajoutée à login_head ici, sinon vous ne pourrez pas vous connecter à partir de cette page non plus.)

Ensuite, il vous suffira d’ajouter un filtre à login_url qui renvoie l’adresse de votre nouvelle page de connexion; sinon, les personnes demandant des fichiers wp-admin seront redirigées vers l’ancienne page de connexion, qui est maintenant désactivée.

4
goldenapples

Ce n’est pas une bonne idée de sécurité car la page wp-login ou wp-admin ne constitue pas en soi une menace pour la sécurité. Bien que l'on puisse faire valoir que si quelqu'un avait votre mot de passe/nom d'utilisateur, il pourrait ne pas être en mesure de trouver où se connecter, d'où la sécurité par l'obscurité.

Comme Kronus a dit que vous pourriez probablement réorienter de façon sophistiquée, ne sachant pas si cela évoluerait avec les versions futures ou si cela en valait la peine, personnellement, je ne pense pas que cela en vaut la peine et je prends la sécurité au sérieux.

Je suggérerais de meilleures idées pour votre connexion.

Activer ssl pour le login/admin (htpps).

Protégez votre page avec un mot de passe en utilisant .htaccess (vous aurez donc un double identifiant).

Utilisez un plug-in tel que Limit Login Attempts, qui verrouille un utilisateur après l'échec des connexions.

4
Wyck

Aucune de ces réponses n'a été particulièrement utile. Je m'interroge sur les motivations du PO, mais voici comment le faire. Ajoutez ceci à votre functions.php, mais assurez-vous de remplacer "$ login_page_id":

// This will redirect the actual login page to your new page
add_action( 'login_redirect', 'custom_login_redirect' );
function custom_login_redirect()
{
    if ( 'wp-login.php' == $GLOBALS['pagenow'] )
    {
        // Set your $login_page_id
        wp_redirect( get_permalink($login_page_id) );
        die;
    }
}

// This will replace the login url used by Wordpress
add_filter( 'login_url', 'custom_login_url', 10, 2 );
public function custom_login_url( $login_url='', $redirect='' )
{
    // Set your $login_page_id
    return get_permalink($login_page_id);
}

Sur votre nouvelle page de connexion, vous pouvez simplement ajouter cette fonction pour afficher un formulaire de connexion:

<?php wp_login_form(); ?>

http://codex.wordpress.org/Function_Reference/wp_login_form

4
Jake

Je ressens vivement la plupart des réponses données ici. Le PO a posé une question valide et la plupart des réponses fournies visaient à échapper au fait qu’ils n’ont aucune idée de la façon de contourner les limitations de Wordpress en la matière.

OP, la meilleure chose que vous puissiez faire à cet égard est le filtrage IP et autorisez uniquement les réseaux autorisés à se connecter à la zone d’administration WP (par exemple, l’adresse IP de votre bureau, celle des développeurs, etc.). De toute façon, vous ne pourrez pas faire votre travail chez Starbucks. C’est comme cela que les réseaux d’entreprise font, vous pouvez donc faire de même.

## .htaccess inside the wp-admin folder
order deny,allow
deny from all
allow from xxx.xxx.xxx
allow from xxx.xxx.xxx
allow from xxx.xxx.xxx
2

J'ai trouvé une solution pour déplacer l'identifiant Wordpress de /login/, /wp-admin/ ou /wp-login.php à /cms en utilisant uniquement les règles de réécriture .htaccess.

Aucun plugin nécessaire!

Collez ceci dans le fichier .htaccess de la racine du projet:

<IfModule mod_rewrite.c>
      # Move login to /cms.
      RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$
      RewriteCond %{HTTP_REFERER} !/cms(.*)$
      RewriteCond %{REQUEST_METHOD} POST
      RewriteRule ^(.*) ./cms?message=wrong_login_path [R=302,L]
      RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$
      RewriteCond %{QUERY_STRING} !^cms=unlocked
      RewriteCond %{REQUEST_METHOD} !POST
      RewriteRule ^(.*) ./cms?message=redirect_to_custom_login_path [R=302,L]
      RewriteRule ^cms wp-login.php?cms=unlocked [L]
</IfModule>

À votre santé!

Mise à jour: / J'ai amélioré certaines règles afin que même les requêtes POST à /wp-login.php déclenchent un 403 forbidden error. Cela aidera contre les robots qui essaient de se connecter au tableau de bord en utilisant des méthodes brutales. N'hésitez pas à commenter cet article si vous avez des améliorations à apporter à ces règles.

2
Floris

Il suffit de créer de nouvelles pages de connexion dans des sous-répertoires. Copiez la page wp-login existante dans un nouveau répertoire de votre racine Web (peut-être "/ login"), renommez-le index.php, ajoutez un bootstrap WordPress en haut de la page et faites ce que vous voulez (thème, etc.). ).

Vous devez ajuster un peu le code par défaut de la page de connexion, principalement pour rechercher/remplacer les liens codés en dur et les redirections vers "wp-login.php". Mais tant que vous laissez tous les crochets et les filtres en place, cette approche ne gâchera pas l'intégration de plug-ins. Et les mises à jour principales de WordPress sont acceptables, sauf si la mise à jour inclut des modifications apportées à la page wp-login (ce qui se produit rarement dans les versions mineures).

Vous pouvez également créer des pages de compte utilisateur de cette façon (je les mets dans le répertoire "/ profil"). Une fois que vous avez fait cela, les utilisateurs au niveau abonné ne devraient jamais avoir besoin de se connecter à wp-admin, vous pouvez donc le protéger avec un fichier htaccess. C’est la partie qui vous procure la sécurité supplémentaire que vous recherchiez. Assurez-vous simplement de faire une exception dans votre htacces pour le fichier admin-ajax, car certains plug-ins l'utilisent sur le frontend.

Bien sûr, vous ne trouverez pas de solution plug-in. Mais si vous le faites, faites le nous savoir!

2
MathSmath

Depuis cinq ans que cette question se pose, personne n’a répondu à la question centrale: La sécurité par l’obscurité est une technique de {valide} pour conjurer les robots automatisés et garder les journaux propres. L’objectif de déplacer/masquer wp-admin est de montrer à un bot qu’il s’agit d’un non site WordPress.

La façon dont je cache (mais ne déplace pas) wp-admin consiste à présenter aux bots la page 404 standard lorsqu'ils essaient d'accéder à cette URL. Seul l'accès depuis l'adresse IP de mon domicile permet à la page wp-admin de s'afficher correctement. Cette méthode ressemble à un attaquant/un bot comme si wp-admin n'existe pas, mais elle ne casse pas le code principal WP ni les plug-ins qui codent en dur le chemin wp-admin. Ce code .htaccess fait l'acte:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^12\.34\.56\.78$
RewriteRule ^/?wp-admin - [R=404,L]

Bien sûr, lorsque vous utilisez le code, remplacez 12.34.56.78 par votre propre adresse IP . N'oubliez pas d'échapper aux caractères . car l'adresse IP est interprétée comme une regex.

1
dotancohen

Vous pouvez essayer de modifier le .htaccess et effectuer une redirection vers un autre chemin qui vous convient.

1
konus

Vous pouvez utiliser ce plugin:

http://wordpress.org/extend/plugins/wp-login/

Vous pouvez simplement créer une page et dire au plugin où se trouve la connexion. Mais tout ce qu’il fait est de rediriger wp-login.php vers votre "page". Ainsi, tout bot cherchant wp-login.php sera simplement redirigé vers votre "page".

Pour protéger votre page de connexion des robots, vous devez utiliser une combinaison de cookie et de .htaccess, car la plupart des robots ne les utilisent pas. Quelque chose comme ça:

RewriteCond %{HTTP_COOKIE} !^PHPSESSID=\w+ [OR]
RewriteCond %{HTTP_REFERER} !^https?://([^.]+\.)?example\.com/ [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule ^wp-(comments-post|login|register)\.php http://example\.com [R=301,L,NS]

Dans l'exemple ci-dessus, j'utilise un cookie de session PHP, car c'est le plus simple à implémenter.

1
MickeyRoush

Pour modifier l'URL de déconnexion (en admin), éditez votre fichier functions.php:

add_filter( 'logout_url', 'custom_logout_url');
function custom_logout_url( $login_url)
{
   $url = str_replace( 'wp-login', 'your_logout_file', $login_url );
   return $url;
}
0
Michal

Cette réponse est un ajout à dotancohen car elle est incomplète. La réponse de dotancohen ne tient pas compte de wp-login.php, que vous devriez considérer si vous essayez d'obscurcir WordPress.

Voici comment vous 404 sur wp-admin et wp-login.php:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^12\.34\.56\.78$
RewriteCond %{THE_REQUEST} \ /+wp-(admin|login)
0
Kurt Serge