
WordPress: Evitare “brute force” via .htaccess
Sempre più spesso dando un’occhiata ai log di sistema vedo attacchi “brute force” sulle pagina di login standard (wp-login.php) di WordPress.
Su alcuni sito sono arrivato ad avere centinaia di tentativi al giorno ma fortunatamente avendo password alfanumeriche da 12 caratteri e non usando l’utente “admin” di default non mi sono mai preoccupato più di tanto.
Nel tempo però mi sono reso conto di due grossi problemi problemi:
- Banda e sovraccarico del server: in questo caso e stato semplice intervenire e plugin come Simple Login Lockdown hanno reso la cosa molto semplice. In pratica dopo un numero configurabile di tentativi falliti, per un periodo di tempo altrettanto configurabile, viene bloccato l’IP impedendo l’accesso alla pagina.
Io lo avevo configurato in modo che dopo 3 tentativi venisse bannato per 4 ore. - Utenti Utonti: Questo è stato il problema più grave. Dato che nella maggior parte dei casi non sono io l’utilizzatore del sito ma il mio lavoro termina creado le credenziali per gli utenti che andranno ad operare, succede che per alcuni una password alfanumerica sia troppo complicata. Ecco quindi che di loro iniziativa la modificano con delle robe tipo “la data di nascita del figlio” perchè così è più facile da ricordare. La soluzione a questa “esigenza imprescindibile” l’ho trovata modificando e nascondendo l’url della pagina di login.
Inizialmente ho usato “hide login” e successivamente anche “better security” ma alla fine ho preferito preparare uno snippet (che trovatre qui sotto) da mettere manualmente nel file .htaccess evitando in questo modo che il plugin possa essere disattivato.
Se volte implementarlo nel nostra installazione vi lascio solo alcune avvertenze in quanto prima di usarlo vanno modificate alcune variabili che sono dipendenti dal vostra configurazione.
[key] = chiave di controllo per il login – es. “0agw7afK” (2 sostituzioni)
[custom-login-path] = nuovo url per la pagina di login – es. “custom-login” (2 sostituzioni)
Attenzione: Prima di metterlo in produzione vi consiglio di provarlo localmente e di fare un backup del vostro precedente .htaccess. (non mi assumo responsabilità).
Rimango comunque disponibile nel caso doveste avere problemi o vogliate segnalarmi come migliorarlo.
—
update: maggio 2015
ho aggionto il file riducendo il numero di variabili
Ma la bella patata a che serve solo ad attirare traffico?
Ma fai il serio scusa è
Lo snippet funziona anche troppo bene, quello che non riesco a capire e come far sì che io possa accedere alla url di login, grazie alla Key. Devo scrivere la stringa in maniera particolare nel browser?
@ASD, funzione prettamente “ornamentale” 😀
@MAR
teoricamente in un’installazione standard dovresti accedere con una url del genere:
http://www.nomesito.com/wp-login.php?hide_in_key=12345&redirect_to=/wp-admin/
(dove 12345 è la nostra chiave)
nel tempo penso di aver migliorato questo script è qui ne trovi una versione più aggiornata: https://gist.github.com/3003290
qui anche alcune slide in cui ho parlato di questa tecnica: http://maurizio.mavida.com/2012/11/26/wordpress-hardening/
Grazie, testerò nei prossimi giorni 🙂
Ciao,
inizio con il rigraziarti per il tuo condividere e ti faccio i miei complimenti per il tuo creare…
Sto provando questa tecnica ma non capisco dove sbaglio, funziona tutto, ossia viene bloccato l’accesso a wp-admin e wp-login ma non a login ho tenuto conto del tuo aggiornamento sto usando “.htaccess | vanillia installation” limitato a questa sola parte.
Hai qualche prezioso consiglio da darmi :-)?
Ok ho capito! Grazie al tuo video
http://youtu.be/LtksvHORoNg
perdona la mia sterminata ignoranza 🙂
Grazie ancora!
Ciao Maurizio,
complimenti per l’articolo! Ti chiedo solo una cosa: per facilitare l’accesso agli “utenti” cosa ne pensi di sistemi di login con autenticazione tipo Clef?
In generale sono assolutamente a favore dell’autenticazione a due fattori ma non lo vedo applicabile a tutte le realtà sopratutto in considerazione del livello medio degli utenti.
Ciao Maurizio,
ho provato a modificare il mio file .htaccess con il tuo snippet. Dopo i primi minuti in cui tutto sembrava funzionare alla grande il server ha cominciato a restituirmi un errore 500. Ho risolto inserendo un file .htaccess “vuoto”. Non ho assolutamente capito il motivo dell’errore e del perché non si è presentato subito. Per onestà devo dirti che sono autodidatta del mondo internet e ci sono ancora parecchie cose che devo imparare. Grazie in anticipo.
Ciao Enrico,
per aiutarti dovrei vedere cosa hai scritto nel tuo htaccess (magari tramite screenshot)
potrebbe anche essere solo un problema di sintassi dovuto ad un copia ed incolla sbagliati o ad una sostituzione sbagliata dei valori tra le parentesi quadre.
infine come ultimo consiglio prova ad eliminare una riga alla volta per capire quale genera il problema
Ciao, mi sono imbattuto in questo articolo ed è stato amore a prima vista, la sicurezza del login passando solo per l’.htaccess senza plugin senza parole… sono andato a cercare il file su github, e pi iol tuo intervento al wordcamp di Bologna su youtube (mitico FTP Brutto)…
Mi chiedevo, visto le date di pubblicazione, il tutto è ancora valido è “sicuro”? e poi visto la mia non eccelsa dimistichezza con codici e affini la “loginkey=12345g&redirect” (che ho ovviamente cambiato) a cosa serve? io ho personalizzato il login e ci vado direttamente digitando cicciologin, ma la key non mi viene mai chiesta e se scrivo wp-admin mi riindirizza alla home, sbaglio qualcosa?
Scusa se ti ho tempestato di domande, grazie del tuo lavoro e delle risposte (se vorrai darmele)
la loginkey (che devi cambiare due volte sia alla riga 5 che alla riga 11) serve solo come chiave per verificare che l’utente sia passato dal link corretto.
il redirect che viene effettuato in modo trasparente dall’htaccess reindirizza con la chiave ma se arrivo su wp-login senza quella chiave (accesso diretto) vengo ributtato in home…
continua però ad esserci una stranezza se vado a “cicciologin” mi indirizza correttamtente se cambio o tolgo un carattere per esempio cicciologn mi rimanda all’hone ma se scrivo qualsiasi cosa dopo ciccilogin che sò cicciologinvattelapesca mi indirizza al wp-admin …
come mai?