Dezactivarea funcției de autentificare în WordPress

14 nov. 2015, 18:36:58
Vizualizări: 14.4K
Voturi: 5

În timpul unui atac masiv de tip brute force, aș dori să dezactivez complet posibilitatea de autentificare în WordPress. Singurul cont de pe site este al meu, așa că nu există niciun motiv pentru vizitatori să se autentifice și nu le-ar afecta experiența pe site.

Când am nevoie să mă autentific, pot elimina codul. Alternativ, pot limita autentificările doar la adresa mea IP.

Încerc să realizez acest lucru prin interceptarea unei încercări de autentificare cât mai devreme posibil cu următorul cod:

if (isset($_POST['pwd']) || isset($_GET['pwd'])) {
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    echo 'autentificările pe site sunt dezactivate';
    die();
}

Această metodă este rudimentară, dar ar trebui să funcționeze. Cu toate acestea, încă există unele încercări de autentificare care reușesc să treacă și nu știu de unde ar putea veni.

În ce alte moduri acceptă WordPress autentificări, dacă nu prin câmpul 'pwd'?

Există o convenție existentă pentru blocarea autentificărilor?

Edit: Pe lângă blocarea wp-login.php, am șters xmlrpc.php care era folosit ca o altă intrare pentru atacurile brute force. Configurația mea actuală nu are nevoie de el, dar a ta s-ar putea să aibă. Asigură-te că nu ai nevoie de el înainte să îl dezactivezi.

10
Comentarii

Sper că acest lucru te va ajuta: http://wordpress.stackexchange.com/questions/62889/disable-or-redirect-wp-login-php

jas jas
14 nov. 2015 18:42:06

Cred că o parolă puternică ar fi suficientă, cu excepția cazului în care volumul de trafic îți afectează site-ul datorită numărului mare de procese PHP + verificări în baza de date. În acest caz, ai putea încerca autentificarea HTTP pentru a evita ca roboții să acceseze fișierele wp-login.php sau xmlrpc.php (fără procese PHP și baza de date).

birgire birgire
14 nov. 2015 18:48:57

@jas - Am încercat să șterg complet fișierul wp-login.php. Tot primesc alerte de "login failed". Ei reușesc să se autentifice prin alte metode, nu doar prin pagina wp-login.php.

Michael Khalili Michael Khalili
14 nov. 2015 22:42:16

@birgire - Am parole puternice, dar acesta este un atac destul de mare. Sper că acesta va fi ceva ce voi putea implementa în cazul unui atac mai mare. Sunt wp-login.php și xmlrpc.php singurele locuri unde cineva se poate autentifica pe site?

Michael Khalili Michael Khalili
14 nov. 2015 22:44:28

Cred că pluginul Wordfence oferă posibilitatea de a bloca după IP. Atacurile brute force sunt destul de comune pe un site de orice dimensiune. De asemenea, oferă posibilitatea de a limita încercările de autentificare.

cameck cameck
15 nov. 2015 02:18:16

@cameck - Am deja un plugin care blochează automat un IP pentru atacuri brute force. Întrebarea mea se referă la blocarea întregului proces de autentificare. Înainte ca acesta să încerce măcar o autentificare.

Michael Khalili Michael Khalili
15 nov. 2015 18:05:33

@MichaelKhalili Ei bine, ai putea folosi acest plugin: https://wordpress.org/plugins/restricted-site-access/ sau există o metodă de a edita fișierul .htaccess pentru a realiza asta: http://www.inmotionhosting.com/support/website/wordpress/lock-down-wordpress-admin-login-with-htaccess

cameck cameck
15 nov. 2015 18:58:18

@cameck - Se pare că accesul restricționat la site limitează accesul la întregul site, nu blochează autentificările. Pot bloca wp-admin și wp-login dar birgire a menționat blocarea xmlrpc.php. Permite și acel fișier acces la autentificare?

Michael Khalili Michael Khalili
16 nov. 2015 02:17:01

@MichaelKhalili Hmm, ai dreptate. Linkul acela este doar pentru blocarea wp-login prin .htaccess. Nu l-am testat personal, îmi pare rău, dar aș încerca! Spune-ne ce se întâmplă!

cameck cameck
16 nov. 2015 03:14:10

@cameck Am reușit în sfârșit să opresc încercările de autentificare eșuate când am șters fișierul xmlrpc.php. Se pare că îl foloseau ca o metodă mai programatică de autentificare.

Michael Khalili Michael Khalili
20 nov. 2015 07:18:20
Arată celelalte 5 comentarii
Toate răspunsurile la întrebare 3
6

Eșuarea autentificării ar trebui să funcționeze pentru toate tipurile posibile de autentificare - formular de login, xmlrpc, ajax, orice altceva

Editare: de fapt, am realizat că există o modalitate de a evita trimiterea interogării legate de utilizator către baza de date

function wpse208677_authenticate($user,$username,$pass) {
  // Elimină filtrul standard de autentificare WordPress
  remove_filter('authenticate','wp_authenticate_username_password',20,3);
  // Returnează null pentru a bloca toate încercările de autentificare
  return null;
  // dacă dorești să permiți accesul doar de la anumite IP-uri, poți verifica aici și returna $user
}

// Adaugă filtrul personalizat cu prioritate mai mare decât cel implicit
add_filter('authenticate','wpse208677_authenticate', 10,3)
14 nov. 2015 18:43:46
Comentarii

Acest lucru este util, dar caut o modalitate de a scurta circuitul procesului de autentificare de la început. Am Sucuri și un alt plugin instalat care mă alertează în cazul atacurilor brute force. Sunt îngrijorat că această metodă ar putea totuși declanșa acțiunile acestor plugin-uri.

Michael Khalili Michael Khalili
14 nov. 2015 22:40:53

@MichaelKhalili, nu poți face asta în mod realist, deoarece încercările de autentificare pot proveni din diverse surse. Dacă ești interesat să blochezi doar wp-login.php sau xmlrpc.php, ar trebui să faci asta la nivelul de configurare al serverului web (htaccess în Apache poate rezolva problema) și să nu lași PHP să ruleze deloc. Singurul cod PHP comparabil (din punct de vedere al performanței) va necesita o modificare a wp-config.php, un fișier pe care ar trebui să-l eviți să-l modifici cât posibil. Orice altă soluție bazată pe PHP nu va fi mai bună din punct de vedere al performanței decât răspunsul oferit.

Mark Kaplun Mark Kaplun
20 nov. 2015 07:44:42

Am rezolvat această problemă de când am postat întrebarea și am actualizat postarea mea. Pot pune codul care caută $_POST['pwd'] într-un plugin obligatoriu (mu-plugins) și pot dezactiva xmlrpc.php. Se pare că asta funcționează. Am oprit majoritatea atacurilor cu $_POST['pwd'], iar restul au fost oprite după ce am dezactivat xmlrpc.php.

Michael Khalili Michael Khalili
20 nov. 2015 18:21:36

Problema cu ștergerea fișierelor este că vor reapărea la actualizare. Mai bine să le blochezi în htaccess dacă nu folosești xmlrpc

Mark Kaplun Mark Kaplun
20 nov. 2015 19:20:01

Foarte bun punct, Mark. Cred că există și o setare pentru a dezactiva suportul xmlrpc în WordPress. Trebuie să aloc timp să testez asta, totuși. Nici măcar nu sunt sigur care este mecanismul de autentificare în acel fișier.

Michael Khalili Michael Khalili
20 nov. 2015 23:41:41

Referitor la dezactivarea în siguranță a XML-RPC, am aflat că o poți dezactiva folosind un filtru add_filter('xmlrpc_enabled', '__return_false'); Există și mai multe pluginuri care fac asta pentru tine. Am folosit acesta https://wordpress.org/plugins/disable-xml-rpc/

Michael Khalili Michael Khalili
20 ian. 2016 03:25:24
Arată celelalte 1 comentarii
2

Răspunsul principal de aici este un cod PHP foarte prost, complet defect. Iată o versiune bună. Punctele mele de reputație sunt prea mici pentru a comenta la răspunsul original.

Acest cod poate fi plasat chiar la finalul fișierului wp-config.php în caz de urgentă.

function wpse208677_authenticate($user,$username,$pass) {
  remove_filter('authenticate','wp_authenticate_username_password',20,3);
  return null;
  // dacă doriți să permiteți doar anumite adrese IP, verificați și returnați $user
}
add_filter('authenticate','wpse208677_authenticate', 1,3)

O altă opțiune este de a preveni accesul la paginile de autentificare/înregistrare. Acest lucru funcționează chiar și în spatele unei adrese de autentificare ascunse pentru WordPress. Acest cod poate fi plasat chiar la începutul fișierului wp-config.php (după deschiderea <?php).

if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
    die('Site-ul este în modul de întreținere.');
}
19 mar. 2018 10:27:08
Comentarii

Îmi pare rău, dar este o idee foarte proastă să pui codul în fișierul wp-config.php. De asemenea, nu văd cum diferă codul tău de cel din celelalte răspunsuri?

Johansson Johansson
19 mar. 2018 10:39:27

Răspunsul anterior al lui Mark K a fost actualizat de tine, Jack, ieri, corectând greșeala de tipar pe care eu o corectasem.

Este o idee proastă să pui cod în wp-config, acest lucru a fost într-un scenariu de urgență pentru cineva care știe ce face. Cu cât intervenim mai devreme, cu atât mai puține resurse are nevoie WP pentru a încărca și bloca autentificările.

Branndon Branndon
20 mar. 2018 16:17:10
5
-3

puteți rezolva aceste probleme folosind

schimbați directorul "wp-admin" și protejați acest director folosind o parolă în fișierul .htaccess

14 nov. 2015 19:02:59
Comentarii

Oricine ia în considerare acest lucru ar trebui să-și amintească că cererile publice ajax sunt încă făcute către directorul wp-admin. Dacă site-ul tău folosește ajax, ar trebui să deblochezi calea către admin-ajax.php

Michael Khalili Michael Khalili
14 nov. 2015 23:14:30

Și cum WordPress folosește AJAX în nucleu, acest lucru nu ar trebui făcut nicăieri.

kaiser kaiser
14 nov. 2015 23:45:47

Sunt de acord că nu este soluția de a "dezactiva" înregistrarea/utilizatorii autentificare, care este întrebarea aici. Dar @kaiser, de ce spui că acest lucru nu ar trebui făcut? Eu fac asta pe două site-uri pe care le administrez personal, unde nu este activată înregistrarea utilizatorilor. De asemenea, folosesc protecție prin parolă .htaccess pentru fișierul wp-login.php. Dacă este configurat corect, cererile Ajax și alte elemente din wp-admin (JS, CSS, imagini) nu sunt o problemă deloc și poate reduce drastic șansele de succes ale atacurilor brute force.

cybmeta cybmeta
25 nov. 2015 08:01:12

@cybmeta ai redenumit wp-admin?

kaiser kaiser
25 nov. 2015 13:25:34

Nu, nu am făcut asta. Aceasta este o altă opțiune dar este mai puțin sigură, URL-ul de admin al site-ului poate fi descoperit cu ușurință, indiferent de ce nume ai dat. Oricum, asta nu explică de ce blocarea accesului la acea locație nu ar trebui făcută deloc. De asemenea, nu văd cum schimbarea numelui este mai bună decât blocarea accesului la o anumită locație. Rețineți că contextul este că nimeni în afară de tine nu va accesa acolo, de ce blocarea accesului pentru oricine altcineva este rea?. În prezent, în cazul în care numai tu ești autorizat să accesezi wp-admin, aș bloca wp-admin cu .htaccess chiar dacă numele este schimbat.

cybmeta cybmeta
25 nov. 2015 14:06:05