Come spostare la pagina di login wp-admin in un'altra posizione?
Puoi disabilitare la pagina wp-login dalle tue funzioni agganciandoti a login_head:
add_action( 'login_head', 'wp_die');
(ovviamente questo è un modo molto grezzo per farlo, ma impedisce a chiunque di poter accedere attraverso quella pagina. Potresti creare una funzione di reindirizzamento o un messaggio di avviso, invece di un semplice die.)
E copia il file wp-login esistente in un'altra posizione, assicurandoti di aggiornare il percorso relativo a wp-load.php
vicino all'inizio (e qualsiasi altro percorso relativo che potrebbe essere presente, inclusi i link a se stesso e le azioni del form.
(Ovviamente dovrai rimuovere l'azione che hai aggiunto a login_head
qui, altrimenti non potrai accedere nemmeno da questa pagina.)
Poi, dovresti solo aggiungere un filtro a login_url
che restituisca l'indirizzo della tua nuova pagina di login, altrimenti le richieste ai file wp-admin verranno reindirizzate alla vecchia pagina di login, che ora è disabilitata.

Questa non è una grande idea per la sicurezza perché la pagina wp-login o wp-admin di per sé non rappresenta una minaccia alla sicurezza. Anche se si potrebbe sostenere che se qualcuno avesse la tua password/nome utente potrebbe non sapere dove effettuare il login, ottenendo così una sicurezza per oscuramento.
Come ha detto kronus, potresti probabilmente fare alcuni reindirizzamenti elaborati, non sono sicuro di quanto sarebbero scalabili con le future versioni o se ne vale davvero la pena, personalmente non penso che ne valga la pena e prendo la sicurezza molto seriamente.
Suggerirei alcune idee migliori per il tuo login.
Abilita SSL per il login/admin (https).
Proteggi con password la tua pagina usando .htaccess (avrai così un doppio login).
Usa un plugin come Limit Login Attempts, che blocca un utente dopo tentativi di login falliti.

Grazie per i tuoi gentili suggerimenti, ma voglio spostare la pagina di login in un'altra posizione.

È assolutamente una buona idea. Nascondere il fatto che il tuo sito è gestito da WordPress scoraggia le persone dal tentare di violare la struttura principale. Se stessi cercando blog WordPress e www.site.com/wp-login.php restituisse un errore 404, passerei oltre senza provare a sfruttare vulnerabilità PHP note. Ogni piccolo accorgimento di sicurezza aiuta a rendere il tuo sito più a prova di proiettile.

E una vulnerabilità nota del core sarebbe? Sì, non ne hai o non ne conosci alcuna, quindi stai parlando per niente. I professionisti della sicurezza proteggono veramente le applicazioni e non nascondono le cose, quello è da bambini.

Non ho mai parlato di exploit del core. Ci sono tantissimi hack per plugin, temi WordPress, ecc. Basta guardare qualsiasi sito che riporta exploit. Osservando i log delle richieste HTTP fallite, i siti che gestisco ricevono attacchi brute force e XSS specificamente mirati a WordPress tutto il giorno, ogni giorno. Secondo la tua logica, non dovresti neanche spostare wp-content
fuori dalla cartella root dell'installazione, mettere wp-config.php
sopra la cartella root, rimuovere "powered by wordpress" dal footer della pagina, cambiare il prefisso predefinito wp_
delle tabelle o eliminare l'account admin di default. Modificare le impostazioni predefinite è una forma di protezione, e la pagina di login non fa eccezione.

Nessuna di queste risposte è stata particolarmente utile. Metto in dubbio le motivazioni dell'OP, ma ecco come farlo. Aggiungi questo al tuo functions.php, ma assicurati di sostituire "$login_page_id":
// Questo reindirizzerà la pagina di login effettiva alla tua nuova pagina
add_action( 'login_redirect', 'custom_login_redirect' );
function custom_login_redirect()
{
if ( 'wp-login.php' == $GLOBALS['pagenow'] )
{
// Imposta il tuo $login_page_id
wp_redirect( get_permalink($login_page_id) );
die;
}
}
// Questo sostituirà l'URL di login utilizzato da Wordpress
add_filter( 'login_url', 'custom_login_url', 10, 2 );
public function custom_login_url( $login_url='', $redirect='' )
{
// Imposta il tuo $login_page_id
return get_permalink($login_page_id);
}
Sulla tua nuova pagina di login, puoi semplicemente aggiungere questa funzione per mostrare un modulo di accesso:
<?php wp_login_form(); ?>

Alla fine ho creato un plugin che gestisce questo. https://wordpress.org/plugins/sewn-in-template-log-in/

OP, la cosa migliore che potresti fare in questo caso è il filtraggio degli IP e consentire solo quelle reti che hanno il permesso di accedere all'area WP-Admin (ad esempio l'IP del tuo ufficio, gli IP degli sviluppatori, ecc.).
## .htaccess all'interno della cartella wp-admin
order deny,allow
deny from all
allow from xxx.xxx.xxx
allow from xxx.xxx.xxx
allow from xxx.xxx.xxx

Nei cinque anni in cui questa domanda è stata qui, nessuno ha affrontato il problema principale: la sicurezza attraverso l'oscurità è una tecnica valida per respingere i bot automatizzati e mantenere i log puliti. L'obiettivo di spostare/nascondere wp-admin
è far sembrare a un bot che questo non sia un sito WordPress.
Il modo in cui nascondo (ma non sposto) wp-admin
è mostrare ai bot la pagina 404 standard quando tentano di accedere a quell'URL. Solo l'accesso dal mio indirizzo IP di casa consente alla pagina wp-admin
di caricarsi correttamente. Questo metodo fa sembrare a un attaccante/bot che wp-admin
non esista, senza però interrompere il codice core di WP o i plugin che utilizzano il percorso wp-admin
in modo hard-coded. Questo codice .htaccess
fa il lavoro:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^12\.34\.56\.78$
RewriteRule ^/?wp-admin - [R=404,L]
Naturalmente, quando utilizzi il codice, sostituisci 12.34.56.78
con il tuo indirizzo IP. Non dimenticare di eseguire l'escape dei caratteri .
poiché l'indirizzo IP viene interpretato come un'espressione regolare.

Questa non è una soluzione poiché la maggior parte delle persone ha un IP dinamico e potrei voler accedere al pannello di amministrazione dal telefono

@TheGodfather: Allora aggiorna il RewriteCond di conseguenza

Ho ideato una soluzione per spostare il login di WordPress da /login/
, /wp-admin/
o /wp-login.php
a /cms
utilizzando solo le regole di riscrittura .htaccess
.
Nessun plugin necessario!
Incolla questo nel file .htaccess nella root del progetto:
<IfModule mod_rewrite.c>
# Sposta il login su /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>
Salute!
Aggiornamento:
Ho migliorato alcune regole in modo che anche le richieste POST
a /wp-login.php generino un errore 403 forbidden
. Questo aiuterà contro i bot che tentano di accedere alla dashboard con metodi brute-force. Sentiti libero di commentare questo post se hai miglioramenti da suggerire per queste regole.

Crea semplicemente nuove pagine di login in sottodirectory. Copia la pagina esistente di wp-login in una nuova directory nella root del tuo sito (ad esempio "/login"), rinominala in index.php, aggiungi il bootstrap di WordPress all'inizio della pagina e personalizzala come preferisci (temi grafici, ecc.).
Dovrai modificare leggermente il codice predefinito della pagina di login, principalmente per sostituire i link e i redirect hardcoded verso "wp-login.php". Ma finché lasci tutti gli hook e i filter al loro posto, questo approccio non interferirà con l'integrazione dei plugin. Gli aggiornamenti del core di WordPress non daranno problemi, a meno che non includano modifiche alla pagina wp-login stessa (cosa che raramente accade nelle versioni minori).
Puoi anche creare pagine per gli account utente in questo modo (io le metto nella directory "/profile"). Una volta fatto, gli utenti di livello subscriber non avranno mai bisogno di accedere a wp-admin, quindi puoi proteggerlo con un file htaccess. Questa è la parte che effettivamente ti darà la maggiore sicurezza che cercavi. Assicurati solo di fare un'eccezione nel tuo htaccess per il file admin-ajax, poiché alcuni plugin lo utilizzano nel frontend.
Sono abbastanza sicuro che non troverai una soluzione basata solo su plugin. Ma se dovessi trovarne una, faccelo sapere!

Potresti utilizzare questo plugin:
http://wordpress.org/extend/plugins/wp-login/
Puoi semplicemente creare una pagina e dire al plugin che quella è la pagina di login. Ma tutto quello che fa è reindirizzare wp-login.php alla tua "pagina". Quindi qualsiasi bot che cerca wp-login.php verrà semplicemente reindirizzato alla tua "pagina".
Per proteggere la tua pagina di login dai bot dovresti usare una combinazione di cookie e .htaccess poiché la maggior parte dei bot non utilizza i cookie. Qualcosa come questo:
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]
Nell'esempio sopra sto usando un cookie di sessione PHP, poiché è il più semplice da implementare.

Questa risposta è un'integrazione a quella di dotancohen perché incompleta. La risposta di dotancohen non tiene conto di wp-login.php
, che dovresti considerare se stai cercando di oscurare WordPress.
Ecco come restituire un errore 404 sia per wp-admin
che per wp-login.php
:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^12\.34\.56\.78$
RewriteCond %{THE_REQUEST} \ /+wp-(admin|login)

Stai parlando di URL Rewrite usando .htaccess? Non rischia di interrompere le funzioni interne del core?

Beh... se lo fai correttamente non dovrebbe interrompere nulla. Leggendo il tuo aggiornamento ti suggerirei di rinominare (o spostare) le tue pagine di login in un'altra directory/path. Cosa hai in mente? Un altro sottodominio? O semplicemente un altro percorso?

Ho risolto questo problema eliminando tre dei miei blog e modificando i parametri di limit-login al massimo possibile. 9999
Per quello sporco spammer all'indirizzo 208.91.199.94 che ha colpito la mia pagina di login 750 volte negli ultimi due giorni, sto lavorando per eliminarlo in altri modi.
