O modalitate de nonces în WordPress și impactul lor asupra siguranței - revista wp

Acasă → Diverse → O modalitate de nonces în WordPress și impactul lor asupra securității

În interiorul WordPress «ascunse» de bază set de instrumente utile. Unul dintre ei - un token-uri de securitate sau «nonces», care se pot proteja împotriva anumitor tipuri de utilizare necorespunzătoare sau utilizarea rău intenționată a site-ului.

Ele nu sunt vizibile în paginile interfeței, dar acestea sunt utilizate pe scară largă în partea administrativă a WordPress. Ca parte a acestui articol vor fi considerate exemple de utilizare a logicii pentru a crea și de a lucra cu nonces, care ar putea înlocui propriul său sistem.

Nonce. Număr folosit o singură dată

Nonce standuri pentru „numărul folosit o dată» (n lipan folosit o singură dată). Aceste numere sau „token-uri“ sunt formate din numere și litere, care este unic pentru fiecare utilizator și pentru fiecare acțiune, și au un „timp de viață“ limitată, după care devine invalid.

În ciuda vorbind expresia „numărul folosit o singură dată“, în realitate nu este așa. Nonce este generat (exemplele ce urmează, vor fi luate în considerare de producere și de descriere a ciclului de viață) pentru un anumit utilizator și, prin urmare, acțiunile vor fi neschimbate atâta timp cât ciclul de viață este completă.

De unică folosință așa cum sunt numite, deoarece acestea sunt concepute în același scop ca și prezenta jetoane o singură dată. De exemplu, ajutor nOdată proteja împotriva anumitor tipuri de atacuri, inclusiv un fals cross-site cereri (CSRF), dar nu protejează împotriva atacurilor de reluare (reluarea Atack), deoarece nonce nu este testat pentru a fi utilizat doar o singură dată.

Număr greșit de WordPress forță nOdată pentru a da răspuns la browser-ul „403 pentru Forbidden“ mesaj de eroare „Sunteți sigur că vrei să faci asta?“.

O modalitate de nonces în WordPress și impactul lor asupra siguranței - revista wp

Sunteți sigur că vrei să faci asta?

Crearea unui număr nonce

În WordPress în avans este funcționalitatea necesară pentru crearea și adăugarea unei adrese URL nOdată ca argument sau câmp ascuns în interiorul matriței. Există unele funcții de bază și de a lucra în alte situații.

generație nonce

c proces are loc cu ajutorul razei laser cheie și săruri care sunt unice pentru fiecare site, cu excepția cazului în WordPress instalat corect. În acest scop, o NONCE_KEY constantă și NONCE_SALT. a declarat în fișierul wp-config.php.

Uneori, valorile setate linia „Enter aici o expresie unică.“ În acest caz, trebuie să utilizați API-ul pentru a crea o cheie secretă. înlocuind aceste valori implicite. După această procedură, toate parolele de utilizator vor rămâne valabile, dar va trebui să vă conectați din nou.

Unde sunt nonce

genera sistem de numere nOdată nu le stoca într-o bază de date, cum ar putea părea la prima vedere. La momentul token-ul de audit este generat din nou și în comparație cu cel care a fost primită.

Nonce ca argument URL

Pentru a adăuga un nDupă la URL-ul există o wp_nonce_url funcție (). care este necesar să se treacă o adresă URL și o linie care indică o acțiune. De exemplu:

Pentru securitate maximă, asigurați-vă că linia care descrie acțiunea, numită cele mai specifice. In exemplul de mai sus, numele acțiunii va arata ca un coș de gunoi-post_123.

Numerele nonce interiorul matriței

În mod implicit, funcția afișează două câmpuri ascunse. Prima conține numărul nonce secrete. În interiorul al doilea câmp - URL-ul curent (referrer). De exemplu:

Cu un astfel de apel va fi de ieșire în următoarele câmpuri ascunse:

Ca și în exemplul anterior, pentru linia de maximă siguranță, care descrie acțiunea care urmează să fie stabilită în mod specific maxim.

În plus, puteți specifica un alt nume pentru câmpul nOdată, nu să se retragă din câmpul referrer, și precizează că rezultatul ar trebui să fie returnate și nu de ieșire. Pentru detalii, consultați Utilizarea wp_nonce_field Descriere pagina function () în codul de WordPress.

utilizarea non-standard a nonce

Pentru a crea un nOdată pentru utilizare în alte cazuri, utilizați funcția wp_create_nonce (). trecerea ca argument linia care descrie efectul. De exemplu:

După aceea, în $ nonce variabilă va fi o cheie unică, de exemplu, 295a686963.

Nu uitați că aici, pentru siguranță maximă ca argument trebuie să treacă o linie cât mai exact posibil să descrie acțiunea comisă.

Verificarea validității numerelor nonce

Pentru toate cele trei metode de punere în aplicare nOdată așa cum este descris în secțiunea anterioară, există o funcție cu care puteți verifica validitatea token-ul.

Verificarea nOdată, obținute cu paginile administrative

Pentru a verifica nonce, transmise prin intermediul adresei URL sau sub formă de panoul de administrare WordPress, trebuie să utilizați funcția check_admin_referer (). care trece ca argumente linia care descrie numele acțiunii.

Verificarea funcțională și nOdată câmp referrer și în cazul în care verificarea nu este de succes, nu va fi acțiunea obișnuită - încetarea codului cu răspunsul 403, și un mesaj de eroare.

Dacă utilizați numele câmpului pentru nOdată diferit de cel prevăzut în mod implicit, trebuie să-l specificați ca al doilea argument:

Vă rugăm să rețineți că această caracteristică funcționează numai în panoul administrativ al WordPress, și nu este potrivit pentru utilizarea în formele publicate pe partea din față a site-ului. Dacă doriți să verificați validitatea codului nDupă pe partea din față, utilizați funcția wp_verify_nonce () (a se vedea. De mai jos).

Verificarea nOdată, obținute prin AJAX-cerere

Dacă ați primit nOdată prin intermediul AJAX-cereri, utilizați funcția check_ajax_referer (). Ca argument, trebuie să treci numele acțiunii:

Funcția de verificare nDupă și dacă verificarea este cu succes, va finaliza executarea codului. Rețineți că această abordare nu ține cont în câmpul referrer, dar această funcție este mulțumit de faptul că cererea a venit într-adevăr pe AJAX.

Dacă utilizați numele câmpului pentru nonce, altele decât cele menționate în mod implicit (_wpnonce sau _ajax_nonce), aveți nevoie pentru a trece parametrii suplimentari. Detalii despre funcția pagina check_ajax_referer () în codul WordPress.

Verificarea nonce, obținute prin alte metode

Nonces, obținute în alte moduri, inclusiv pe partea frontală a site-ului, poate fi testată folosind funcția wp_verify_nonce (). Această funcție are două argumente: valoarea codului nDupă a primit și numele acțiunii. De exemplu:

În cazul unui rezultat negativ nu ar trebui să continue procesarea solicitării. wp_nonce_ays De obicei, în astfel de cazuri, este cauzat (). care dă browser-ul „403 Forbidden» mesaj de eroare.

Schimbarea sistemului nonce în WordPress

Sistemul funcționează cu nonce poate fi modificată folosind o varietate de evenimente și filtre. Unele dintre funcțiile de a lucra cu nonce plasat în fișierul pluggable.php. iar acest lucru înseamnă că ele pot fi ușor înlocuite cu propria valoare.

De exemplu, pentru a schimba verificarea cererilor de logica AJAX, aveți nevoie pentru a scrie propria funcția check_ajax_referrer () în plugin. Lista de funcții și filtre pentru a lucra cu nonce pot fi găsite în Codul.

Schimbarea în viață codurile speranței nonce

În mod implicit, acțiunea termenul nOdată este egal cu o zi. După aceea, numărul de nOdată nu mai este valabilă, chiar dacă același nume de acțiune. Pentru a schimba ora, utilizați filtrul nonce_life. Trebuie să specificați un timp în secunde. De exemplu, următorul cod stabilește perioada de valabilitate de 4 ore:

Rețineți că nonce, așa cum sa menționat mai sus, nu este un „număr folosit o singură dată.“ Valabilitatea nOdată nu coincide cu termenul acestei unice jetoane.

Pentru a conta nonce pe viață, WordPress utilizează un sistem cu două ore „căpușe“, unde 1 căpușe este echivalentă cu jumătate de viață. În al doilea nonce căpușă poate fi actualizată, de exemplu prin intermediul AutoSave.

La setările implicite, în cazul în care durata nonce este valabilă timp de 24 de ore, acest lucru înseamnă că informațiile de timp în cadrul nonce, a declarat in mai multe perioade de douăsprezece ore de timp a trecut de la începutul epocii Unix.

Nonce, creat în perioada de la 12:00 la 24:00 va fi valabilă până la ora 12:00 în ziua următoare. Speranța de viață reală va fi o valoare între 12 și 24 de ore. Exemplul de mai sus, în cazul în care viața a fost stabilită la 4 ore înseamnă că nonce este valabil între 2 până la 4 ore.

Pentru a înțelege pe deplin esența o privire la funcția de cod sursă wp_nonce_tick (). care returnează numărul de intervale de 12 ore.

Și acum funcția wp_verify_nonce (). Controale nDupă și în același timp contorizează numărul de căpușe.

Efectuați verificări suplimentare

Pentru a efectua teste suplimentare în momentul când check_admin_referer funcția () a constatat că nonce și referrer-ul este valid, puteți utiliza check_admin_referer ca un eveniment:

În mod similar, se poate „agăța“ la evenimentul din cadrul check_ajax_referer check_ajax_referer apel ().

Schimbarea aspectului paginii de eroare

Aspectul paginii cu un mesaj de eroare, pentru a da în cazul nOdată de invaliditate, poate fi schimbat. Funcția wp_nonce_ays () trimite funcțiile necesare ale mesajului de eroare cu wp_die dramatic din titlu (). În acest din urmă există mai multe filtre pentru a separa de procesare AJAX, XML-RPC, precum și toate celelalte cereri. De exemplu:

Interceptarea filtru, puteți specifica funcția proprie care poate da o pagină cu un aspect total diferit.

În concluzie, trebuie remarcat faptul că, dacă sunt în curs de dezvoltare o temă și mai ales plugin-uri pentru WordPress, nu uitați să utilizați un număr de nOdată de unică folosință în toate interfețele, deoarece lipsa lor poate duce cu ușurință la crăparea site-urile utilizatorilor.