Come disattivare la possibilità di login in WordPress

14 nov 2015, 18:36:58
Visualizzazioni: 14.4K
Voti: 5

Durante un vasto attacco brute force, vorrei disattivare completamente la possibilità di accedere a WordPress. L'unico account sul sito è il mio, quindi non c'è motivo per cui i visitatori debbano accedere e non danneggerebbe la loro esperienza sul sito.

Quando ho bisogno di accedere, posso rimuovere il codice. In alternativa, posso limitare gli accessi solo al mio indirizzo IP.

Sto cercando di ottenere questo risultato intercettando un tentativo di accesso il prima possibile con il seguente codice

if (isset($_POST['pwd']) || isset($_GET['pwd'])) {
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    echo 'Gli accessi al sito sono disabilitati';
    die();
}

È un approccio rudimentale ma dovrebbe funzionare. Tuttavia, alcuni tentativi di accesso riescono ancora a passare e non so da dove potrebbero provenire.

In che altro modo WordPress accetta gli accessi, se non con il campo 'pwd'?

Esiste una convenzione esistente per disabilitare gli accessi?

Modifica: oltre a bloccare wp-login.php, ho eliminato xmlrpc.php che veniva utilizzato come un altro punto di ingresso per gli attacchi brute force. La mia configurazione attuale non ne ha bisogno, ma la tua potrebbe. Assicurati di non averne bisogno prima di disabilitarlo.

10
Commenti

Spero che questo ti possa aiutare: http://wordpress.stackexchange.com/questions/62889/disable-or-redirect-wp-login-php

jas jas
14 nov 2015 18:42:06

Penserei che una password robusta sarebbe sufficiente, a meno che il traffico non stia rallentando il tuo sito a causa del gran numero di processi PHP + controlli al database. In tal caso potresti provare l'autenticazione HTTP per evitare che i bot accedano ai tuoi file wp-login.php o xmlrpc.php (senza processi php + db).

birgire birgire
14 nov 2015 18:48:57

@jas - Ho provato a eliminare completamente il file wp-login.php. Continuo a ricevere avvisi di "login fallito". Riescono ad accedere attraverso metodi diversi, oltre alla pagina wp-login.php.

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

@birgire - Ho password complesse ma si tratta di un attacco di dimensioni consistenti. Spero che questo possa essere qualcosa che potrò implementare in caso di un attacco più grande. wp-login.php e xmlrpc.php sono gli unici punti in cui qualcuno può autenticarsi nel sito?

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

Credo che il plugin Wordfence offra la possibilità di bloccare per IP. Gli attacchi brute force sono abbastanza comuni su siti di qualsiasi dimensione. Offre anche la possibilità di limitare i tentativi di login

cameck cameck
15 nov 2015 02:18:16

@cameck - Ho già un plugin che blocca automaticamente un IP per attacchi brute force. La mia domanda riguarda il bloccare completamente il processo di login. Prima che venga anche solo tentata un'autenticazione.

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

@MichaelKhalili Beh, potresti usare questo plugin: https://wordpress.org/plugins/restricted-site-access/ oppure c'è un modo per modificare il file .htaccess per ottenere questo risultato: http://www.inmotionhosting.com/support/website/wordpress/lock-down-wordpress-admin-login-with-htaccess

cameck cameck
15 nov 2015 18:58:18

@cameck - Sembra che Restricted site access limiti l'accesso all'intero sito, non blocchi i login. Posso bloccare wp-admin e wp-login ma birgire ha menzionato il blocco di xmlrpc.php Quel file permette anche l'accesso via login?

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

@MichaelKhalili Hmm hai ragione. Quel link serve solo per bloccare wp-login via .htaccess. Non l'ho testato personalmente, mi dispiace, ma ci proverei! Facci sapere cosa succede!

cameck cameck
16 nov 2015 03:14:10

@cameck Alla fine ho smesso di ricevere tentativi di accesso falliti quando ho eliminato xmlrpc.php. Sembra che lo stessero utilizzando come metodo più programmatico per effettuare il login.

Michael Khalili Michael Khalili
20 nov 2015 07:18:20
Mostra i restanti 5 commenti
Tutte le risposte alla domanda 3
6

Il fallimento dell'autenticazione dovrebbe funzionare per tutti i tipi possibili di autenticazione - modulo di login, xmlrpc, ajax, ecc.

Modifica: in realtà ho realizzato che c'è un modo per evitare di inviare la query relativa all'utente al database

function wpse208677_authenticate($user,$username,$pass) {
  remove_filter('authenticate','wp_authenticate_username_password',20,3);
  return null;
  // se vuoi inserire nella whitelist il tuo ip verificalo e restituisci $user
}

add_filter('authenticate','wpse208677_authenticate', 10,3)
14 nov 2015 18:43:46
Commenti

È utile, ma sto cercando un modo per interrompere il login fin dall'inizio. Ho Sucuri e un altro plugin che mi avvisano sugli attacchi brute force. Sono preoccupato che questo potrebbe comunque attivare le azioni su quei plugin.

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

@MichaelKhalili, non puoi realisticamente farlo poiché i tentativi di login possono provenire da varie fonti. Se vuoi bloccare solo wp-login.php o xmlrpc.php, dovresti farlo a livello di configurazione del webserver (htaccess in Apache può fare al caso tuo) senza far eseguire affatto il PHP. L'unico codice PHP comparabile (a livello di prestazioni) richiederebbe una modifica di wp-config.php, un file che dovresti evitare di modificare il più possibile. Qualsiasi altra soluzione basata su PHP non sarà migliore a livello di prestazioni rispetto alla risposta data.

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

Ho risolto da quando ho postato la domanda e ho aggiornato il mio post. Posso inserire il codice che cerca $_POST['pwd'] in un plugin must-use (mu-plugins) e disabilitare xmlrpc.php. Sembra funzionare. Ho bloccato la maggior parte degli attacchi con $_POST['pwd'] e il resto dopo aver disabilitato xmlrpc.php.

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

Il problema con l'eliminazione dei file è che torneranno quando effettui un aggiornamento. Meglio bloccarli in htaccess se non usi xmlrpc

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

Ottimo punto Mark. Penso ci sia anche un'impostazione per disattivare il supporto xmlrpc all'interno di WordPress. Devo però ritagliarmi del tempo per testarlo. Non sono nemmeno sicuro di quale sia il meccanismo di login all'interno di quel file.

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

Per quanto riguarda la disabilitazione sicura di XML-RPC, ho scoperto che puoi disabilitarlo usando un filtro add_filter('xmlrpc_enabled', '__return_false'); Ci sono anche diversi plugin che lo fanno per te. Io ho usato questo https://wordpress.org/plugins/disable-xml-rpc/

Michael Khalili Michael Khalili
20 gen 2016 03:25:24
Mostra i restanti 1 commenti
2

La risposta principale qui è un codice PHP terribilmente pessimo, completamente rotto. Ecco una versione corretta. I miei punti di reputazione sono troppo bassi per commentare la risposta originale.

Questo codice può essere inserito in fondo al file wp-config.php in caso di necessità.

function wpse208677_authenticate($user,$username,$pass) {
  remove_filter('authenticate','wp_authenticate_username_password',20,3);
  return null;
  // se vuoi permettere l'accesso solo a determinati IP, verificalo e restituisci $user
}
add_filter('authenticate','wpse208677_authenticate', 1,3)

Un'altra opzione è impedire l'accesso alle pagine di login/registrazione. Funziona anche con un URL di login nascosto per WordPress. Questo codice può essere inserito all'inizio di wp-config.php (dopo l'apertura <?php).

if ( in_array( $_SERVER['PHP_SELF'], array( '/wp-login.php', '/wp-register.php' ) ) ){
    die('Sito in modalità manutenzione.');
}
19 mar 2018 10:27:08
Commenti

Mi dispiace ma è un'idea molto sbagliata inserire il codice nel file wp-config.php. Inoltre, non vedo in che modo il tuo codice sia diverso dall'altra risposta?

Johansson Johansson
19 mar 2018 10:39:27

La risposta precedente di Mark K è stata aggiornata da te, Jack, ieri, correggendo l'errore di battitura che avevo corretto io.

È una cattiva idea inserire codice in wp-config, questo era per uno scenario di emergenza per qualcuno che sa cosa sta facendo. Prima interveniamo, meno risorse WordPress deve caricare per bloccare gli accessi.

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

puoi risolvere questi problemi utilizzando

modifica la directory "wp-admin" e proteggi questa cartella utilizzando una password .htaccess

14 nov 2015 19:02:59
Commenti

Chiunque stia considerando questo dovrebbe ricordare che le richieste ajax pubbliche vengono ancora effettuate nella directory wp-admin. Se il tuo sito utilizza ajax, dovresti sbloccare il percorso verso admin-ajax.php

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

E dato che WP utilizza AJAX nel core, questo non dovrebbe essere fatto in nessun caso.

kaiser kaiser
14 nov 2015 23:45:47

Concordo che non sia la soluzione per "disabilitare" la registrazione/accesso degli utenti, che è la domanda qui. Ma @kaiser, perché dici che non dovrebbe essere fatto? Io lo faccio su due siti che gestisco personalmente dove non è abilitata la registrazione utenti. Uso anche la protezione via password in .htaccess per il file wp-login.php. Se configurato correttamente, le richieste Ajax e altre cose da wp-admin (JS, CSS, immagini) non sono affatto un problema e può ridurre drasticamente le possibilità di successo degli attacchi brute force.

cybmeta cybmeta
25 nov 2015 08:01:12

@cybmeta hai rinominato wp-admin?

kaiser kaiser
25 nov 2015 13:25:34

No, non l'ho fatto. Questa è un'altra opzione ma è meno sicura, l'URL di amministrazione del sito può essere facilmente scoperto, indipendentemente dal nome che gli hai dato. Comunque, questo non spiega perché bloccare l'accesso a quella posizione non dovrebbe essere fatto affatto. Inoltre, non vedo come cambiare il nome sia meglio che bloccare l'accesso a una certa posizione. Nota che il contesto è che nessuno tranne te accederà lì, perché bloccare l'accesso a tutti gli altri è negativo? Attualmente, nel caso in cui solo tu sia autorizzato ad accedere a wp-admin, bloccherei wp-admin con .htaccess anche se il nome è cambiato.

cybmeta cybmeta
25 nov 2015 14:06:05