Cum să muți pagina de autentificare wp-admin în altă locație?
Doresc să mut pagina de autentificare fizic (nu virtual). Vă rog să sugerați o soluție bazată pe plugin care ar putea modifica codurile de bază din mers (chiar și după actualizarea codului de bază). Poate fi un nivel suplimentar de securitate.

Puteți dezactiva pagina wp-login din funcțiile dumneavoastră prin conectarea la login_head:
add_action( 'login_head', 'wp_die');
(aceasta este în mod evident o metodă foarte neelegantă de a face acest lucru, dar împiedică oricine să se poată autentifica prin acea pagină. Ați putea transforma asta într-o funcție de redirecționare sau un mesaj de avertizare, în loc să folosiți doar die.)
Și copiați fișierul existent wp-login într-o altă locație, asigurându-vă că actualizați calea relativă către wp-load.php
din partea de sus (precum și orice alte căi relative care ar putea fi acolo, inclusiv linkurile către sine și acțiunile formularului.
(Evident, va trebui să eliminați acțiunea pe care ați adăugat-o la login_head
aici, altfel nu veți putea să vă autentificați nici din această pagină.)
Apoi, ar trebui doar să adăugați un filtru la login_url
care să returneze adresa noii pagini de autentificare, altfel solicitările pentru fișierele wp-admin vor fi redirecționate către vechea pagină de autentificare, care acum este dezactivată.

Nu este o idee bună din punct de vedere al securității, deoarece pagina wp-login sau wp-admin în sine nu reprezintă o amenințare la adresa securității. Deși se poate argumenta că, dacă cineva are parola/numele de utilizator, s-ar putea să nu știe unde să se autentifice, astfel obținând securitate prin obscuritate.
Așa cum a spus kronus, probabil ai putea face niște redirecționări inteligente, dar nu sunt sigur cât de bine s-ar scala cu viitoarele versiuni sau dacă merită efortul. Personal, nu cred că merită, iar eu iau securitatea în serios.
Aș sugera câteva idei mai bune pentru pagina ta de autentificare:
Activează SSL pentru autentificare/administrare (https).
Protejează pagina cu parolă folosind .htaccess (astfel vei avea o dublă autentificare).
Folosește un plugin precum Limit Login Attempts, care blochează un utilizator după un anumit număr de încercări eșuate de autentificare.

Mulțumesc pentru sugestiile tale frumoase, dar vreau să mut pagina de login în altă locație.

Este cu siguranță o idee bună. Ascunderea faptului că site-ul tău este construit pe WordPress descurajează oamenii să încerce să hack-uiască structura de bază. Dacă aș fi în căutare de bloguri WordPress și aș încerca www.site.com/wp-login.php și aș primi o eroare 404, aș trece mai departe fără a încerca să exploatez vulnerabilități PHP cunoscute. Orice măsură de securitate ajută la face site-ul tău mai robust.

Și o vulnerabilitate cunoscută în nucleu ar fi? Nu, tu nu ai sau nu cunoști nicio vulnerabilitate, așa că vorbești degeaba. Profesioniștii în securitate securizează aplicațiile și nu ascund lucruri, asta e pentru copii.

Nu am spus niciodată despre exploit-uri pentru nucleu. Există o grămadă de hack-uri pentru plugin-uri WordPress, teme, etc. Doar aruncați o privire pe orice site de raportare a exploit-urilor. Uitându-mă în jurnalele de cereri HTTP eșuate, site-urile pe care le administrez primesc atacuri brute force și XSS personalizate pentru WordPress toată ziua, în fiecare zi. După logica ta, nici nu ar trebui să muți wp-content
în afara folderului rădăcină, wp-config.php
deasupra folderului rădăcină, să elimini "powered by wordpress" din subsolul paginii, să schimbi prefixul implicit wp_
al tabelelor sau să ștergi contul implicit de admin. Modificarea setărilor implicite este securizare, iar pagina de login nu face excepție.

Niciunul dintre aceste răspunsuri nu a fost deosebit de util. Mă întreb care sunt motivele OP, dar iată cum să faci asta. Adaugă acest cod în fișierul tău functions.php, dar asigură-te să înlocuiești "$login_page_id":
// Aceasta va redirecționa pagina reală de login către noua ta pagină
add_action( 'login_redirect', 'custom_login_redirect' );
function custom_login_redirect()
{
if ( 'wp-login.php' == $GLOBALS['pagenow'] )
{
// Setează $login_page_id-ul tău
wp_redirect( get_permalink($login_page_id) );
die;
}
}
// Aceasta va înlocui URL-ul de login folosit de WordPress
add_filter( 'login_url', 'custom_login_url', 10, 2 );
public function custom_login_url( $login_url='', $redirect='' )
{
// Setează $login_page_id-ul tău
return get_permalink($login_page_id);
}
Pe noua ta pagină de login, poți pur și simplu să adaugi această funcție pentru a afișa un formular de login:
<?php wp_login_form(); ?>

Am ajuns să creez un plugin care se ocupă de asta. https://wordpress.org/plugins/sewn-in-template-log-in/

OP, cel mai bun lucru pe care îl poți face în această privință este filtrarea IP și permisiunea accesului doar pentru acele rețele care au voie să se autentifice în zona WP-Admin (de ex. IP-ul biroului tău, IP-ul dezvoltatorilor, etc.).
## .htaccess în interiorul folderului wp-admin
order deny,allow
deny from all
allow from xxx.xxx.xxx
allow from xxx.xxx.xxx
allow from xxx.xxx.xxx

În cei cinci ani de când există această întrebare, nimeni nu a abordat problema principală: Securitatea prin obscuritate este o tehnică validă pentru a respinge boturile automate și a menține jurnalele curate. Scopul mutării/ascunderii wp-admin
este de a părea pentru un bot că acesta nu este un site WordPress.
Modul în care ascund (dar nu mut) wp-admin
este să prezint boturilor pagina standard 404 atunci când încearcă să acceseze acea adresă URL. Numai accesul de la adresa mea IP de acasă permite încărcarea corectă a paginii wp-admin
. Această metodă face ca pentru un atacator/bot să pară că wp-admin
nu există, fără a strica codul de bază al WP sau pluginurile care utilizează calea wp-admin
în mod direct. Acest cod .htaccess
realizează acest lucru:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^12\.34\.56\.78$
RewriteRule ^/?wp-admin - [R=404,L]
Desigur, când utilizați codul, înlocuiți 12.34.56.78
cu propria dvs. adresă IP. Nu uitați să escapați caracterele .
, deoarece adresa IP este interpretată ca o expresie regulată.

Aceasta nu este o soluție deoarece majoritatea covârșitoare a oamenilor au IP dinamic, iar eu aș putea dori să mă autentific în panoul de administrare de pe telefon

@TheGodfather: Atunci actualizează RewriteCond în consecință

Am găsit o soluție pentru mutarea paginii de login Wordpress de la /login/
, /wp-admin/
sau /wp-login.php
la /cms
folosind doar reguli de rescriere în .htaccess
.
Fără nevoie de plugin!
Lipiți acest cod în fișierul .htaccess din rădăcina proiectului:
<IfModule mod_rewrite.c>
# Mută login-ul la /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>
Noroc!
Actualizare:
Am îmbunătățit câteva reguli astfel încât chiar și cererile POST
către /wp-login.php să genereze o eroare 403 interzis
. Acest lucru va ajuta împotriva boturilor care încearcă să se autentifice în panoul de administrare folosind metode de forță brută. Nu ezitați să comentați acest articol dacă aveți sugestii de îmbunătățire pentru aceste reguli.

Pur și simplu construiește pagini noi de autentificare în subdirectoare. Copiază pagina existentă wp-login într-un director nou în rădăcina site-ului (poate "/login"), redenumește-o în index.php, adaugă un bootstrap WordPress în partea de sus a paginii și fă ce dorești cu ea (temă, etc.).
Trebuie să ajustezi puțin codul implicit al paginii de autentificare, în principal pentru a înlocui link-urile și redirecționările hardcodate către "wp-login.php". Dar atâta timp cât lași toate hook-urile și filtrele la locul lor, această abordare nu va afecta integrarea cu plugin-urile. Actualizările nucleului WordPress sunt în regulă, cu excepția cazului în care actualizarea include modificări la pagina wp-login în sine (ceea ce se întâmplă rar în versiunile minore).
De asemenea, poți construi pagini de cont utilizator în acest fel (eu le-am plasat în directorul "/profile"). După ce ai făcut acest lucru, utilizatorii cu nivel de abonat nu ar trebui să aibă nevoie să intre în wp-admin, așa că poți să-l protejezi cu un fișier htaccess. Aceasta este partea care îți oferă de fapt securitatea sporită pe care o cauți. Doar asigură-te să faci o excepție în htaccess pentru fișierul admin-ajax, deoarece unele plugin-uri îl folosesc pe frontend.
Sunt destul de sigur că nu vei găsi o soluție bazată doar pe plugin-uri. Dar dacă găsești, anunță-ne!

Ai putea folosi acest plugin:
http://wordpress.org/extend/plugins/wp-login/
Poți crea pur și simplu o pagină și să-i spui pluginului că acolo se află pagina de login. Dar, în esență, tot ce face este să redirecționeze wp-login.php către "pagina" ta. Deci, orice bot care caută wp-login.php va fi pur și simplu redirecționat către "pagina" ta.
Pentru a-ți proteja pagina de login de boti, ar trebui să folosești o combinație între un cookie și .htaccess, deoarece majoritatea botilor nu folosesc cookie-uri. Ceva de genul:
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]
În exemplul de mai sus, folosesc un Cookie de Sesiune PHP, deoarece este cel mai ușor de implementat.

Acest răspuns este un supliment la dotancohen deoarece este incomplet. Răspunsul lui dotancohen nu ia în considerare wp-login.php
, pe care ar trebui să-l ții în vedere dacă încerci să ascunzi WordPress.
Iată cum poți returna eroarea 404 atât pentru wp-admin
cât și pentru wp-login.php
:
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^12\.34\.56\.78$
RewriteCond %{THE_REQUEST} \ /+wp-(admin|login)

Vorbești despre rescrierea URL-urilor folosind .htaccess? Nu strică funcțiile interne de bază?

Ei bine... dacă o faci corect, nu ar trebui să strici nimic. Citind actualizarea ta, aș sugera să redenumești (sau să muți) elementele tale de logare într-un alt director/cale. Ce ai în minte? Un alt sub-domeniu? Sau doar o altă cale?

Am rezolvat această problemă ștergând trei dintre blogurile mele și modificând parametrii limit-login la valorile maxime posibile. 9999
Pentru acel ticălos spammer de la 208.91.199.94 care a atacat pagina mea de login de 750 de ori în ultimele două zile, lucrez la eliminarea lui prin alte metode.
