2017-10-08 6 views
0

Je remarque une augmentation des commandes POST à ​​distance à mon wp-login.php (principalement pour tenter une réinitialisation de mot de passe). Alors que je me suis protégé contre l'usurpation de l'adresse de réponse, il est toujours agaçant que je les reçoive. Ainsi, la recherche dans les journaux, je remarque ces demandes sont tous les sites distants l'envoi d'une commande POST:nginx refuser POST à ​​wp-login.php sauf sur la même page

POST /wp-login.php?action=lostpassword HTTP/1.1" 302 5 "-" "-"

Donc ce que je veux faire est de configurer nginx pour bloquer toute commande POST qui ne vient pas du mot de passe perdu lien cliqué sur la page wp-login.php elle-même. Est-ce possible?

J'ai d'abord essayé d'utiliser les éléments suivants (proposé sur le site Wordpress), mais il n'empêche pas accès à cette page (testé POSTMAN):

location ~* (wp-comments-posts|wp-login)\.php$ { 
     if ($http_referer !~ ^(https://example.com)) { 
      return 405; 
     } 
     } 

Puis, remarquant que j'ai un autre bloc dans ce le fichier comme ceci:

location = /wp-login.php { 
    limit_req zone=one burst=1 nodelay; 
    include fastcgi_params; 
    fastcgi_pass php7; 
} 

J'ai essayé de le modifier de la manière suivante:

location = /wp-login.php { 
    limit_req zone=one burst=1 nodelay; 
    include fastcgi_params; 
    fastcgi_pass php7; 

    if ($http_referer !~ ^(https://example.com)) { 
      return 405; 
     } 

} 

mais cela bloque tout le monde, même dans le navigateur, ce qui n'est pas ce que je veux. Est-il impossible de bloquer l'accès à wp-login.php?action=lostpassword par quiconque ne vient pas du lien de mot de passe perdu sur wp-login.php dans le navigateur?

Répondre

0

Le référent est facilement usurpé et généralement irréalisable, ne l'utilisez pas à des fins de sécurité.

A la place, utilisez un plugin pour renommer l'URL pour accéder à la connexion. Remplacez /wp-login.php par/letMeIn/or/MyLogin /. Il est assez facile de le dire à vos utilisateurs et cela permet aux bots aléatoires de trouver des mots de passe faibles. Je suis assez sûr que vous pourriez même mettre un lien vers votre URI de connexion non-standard sur votre site web et que vous en bénéficieriez grandement, car les robots n'analysent pas votre site, mais essaient juste d'attaquer installations WordPress par défaut.

Avec cela de la manière,

if ($http_referer !~ "^https://example.org/") { return 403; } 

fonctionne bien pour moi sur un nginx courant. Si ce n'est pas le cas, utilisez les outils de développement de votre navigateur pour regarder les demandes réelles envoyées et ce que vous envoyez en tant que Referer à votre serveur.

J'ai également ajouté un/après le nom d'hôte (même si l'en-tête est facilement falsifié et cela n'aidera pas à falsifier), pour s'assurer qu'il ne fonctionnera pas pour https://example.org.example.com.

+0

J'essayais d'éviter de renommer les pages de connexion, mais j'ai conclu que vous avez raison, et je suis allé dans cette direction. Merci! – Stephen