De ce ar trebui să folosesc esc_url?

12 sept. 2015, 22:00:12
Vizualizări: 30.3K
Voturi: 20

Acest lucru îmi face programarea mai dificilă. Documentația WordPress explică folosirea esc_url vorbind vag despre securitate. Dar merită cu adevărat efortul?

De exemplu, care este beneficiul practic important în ceea ce privește securitatea atunci când folosim

<?php echo esc_url( home_url( '/' ) ); ?>

în loc de

<?php echo home_url() ?>

PS: Nu vorbesc despre dezvoltarea de teme, ci despre un site specific.

0
Toate răspunsurile la întrebare 4
4
20

Dacă consultați documentația despre Validarea Datelor, aceasta menționează următoarele despre funcție:

Utilizați întotdeauna esc_url atunci când sanitizați URL-uri (în noduri de text, noduri de atribut sau oriunde altundeva). Respinge URL-urile care nu au unul dintre protocoalele permise [...], elimină caracterele invalide și elimină caracterele periculoase.

Aveți aici — un beneficiu practic de securitate. Protocol valid, fără caractere dubioase.

Răspunsul despre necesitate este categoric da. Escaparea output-ului este cea mai de bază practică de securitate.

12 sept. 2015 23:33:10
Comentarii

Cu tot respectul, nu văd cum link-ul către pagina principală, de exemplu, poate reprezenta un risc de securitate. Poate aceste ghiduri sunt pentru crearea de teme și nu se aplică pentru codul "privat"? La urma urmei, poate fi mai bine să hardcodezi adresa paginii principale și alte link-uri în HTML și să nu folosești deloc PHP dacă există riscuri de securitate?

IXN IXN
13 sept. 2015 00:23:39

Este mult mai productiv să aplici practici de securitate în mod consecvent și universal, decât să deții dacă fiecare caz în parte merită. :)

Rarst Rarst
13 sept. 2015 01:40:34

Pe de altă parte, o resursă recomandată de Codex stabilește Regula nr. 3: Ai încredere în WordPress. Aceasta pare să recomande împotriva supra-sanitizării funcțiilor de bază ale WordPress, cum ar fi home_url(), dacă sunt folosite în contextul lor potrivit. Conform acestei recomandări, m-am așteptat ca home_url să efectueze propria sa sanitizare.

Franco Franco
11 iun. 2017 12:37:48

Scuze, sunt destul de nou în acest subiect, dar poate cineva să ofere un exemplu în care home_url() sau poate get_permalink() (unde, din câte știu, ar trebui folosit și esc_url()) returnează un URL invalid sau nesancționat (?) Nu vreau să fiu leneș sau încăpățânat, de aceea un exemplu m-ar putea ajuta să înțeleg utilizarea.

SunnyRed SunnyRed
25 iul. 2022 22:01:34
0

Alte lucruri importante de reținut despre esc_url() este că trebuie folosit pentru ceva de genul <a href="SANITIZE_THIS_URL">textul_tău</a>. Dacă intenționezi să folosești URL-ul în output-ul HTML, cum ar fi un atribut href pentru un link sau un atribut src pentru un element imagine, ar trebui să folosești esc_url().

esc_url_raw() este pentru alte cazuri în care dorești un URL curățat, dar nu vrei ca entitățile HTML să fie codate. Deci orice utilizare non-HTML (baze de date, redirectări) ar folosi această funcție.

Funcția esc_url_raw() face practic același lucru ca esc_url(), dar nu decodează entitățile, adică nu va înlocui & cu &#038 și așa mai departe. După cum a menționat Mark, este sigur să folosești esc_url_raw() în interogările de bază de date, redirectări și funcții HTTP, cum ar fi `wp_remote_get()'. pentru mai multe informații despre esc_url_raw()

13 sept. 2015 00:29:11
2

ei bine, toate datele introduse de utilizator ar trebui să fie sanitizate... Dacă URL-ul pe care îl injectezi nu este introdus de utilizator (de ex. setare de site de către cineva în care ai încredere deplină, valori hardcodate), atunci poți să te relaxezi în privința esc-url.

dar dacă aș putea injecta acel URL pe site-ul tău, aș putea injecta cu ușurință cod JS, sau cod de redirecționare... sau chiar cod pe partea de server în unele situații.

acest lucru poate duce la furt de sesiuni și la furtul conturilor utilizatorilor tăi, precum și la alte consecințe neplăcute.

Editare:

În exemplul tău esc_url( home_url( '/' ) );
a operat pe o valoare semi-hardcodată! prin urmare esc_url poate fi eliminat.
Cu toate acestea, tot nu văd de ce să facem distincții între când există o amenințare și când nu și, în general, aș sugera să păstrăm esc_url() pentru fiecare valoare.

13 sept. 2015 10:19:58
Comentarii

"Setările site-ului făcute de cineva în care ai încredere" sunt tot literalmente date introduse de utilizator. :)

Rarst Rarst
13 sept. 2015 18:57:21

@Rarst da, sunt de acord cu tine, dar el era atât de "dezgustat" de folosirea esc_url, încât am fost un pic mai indulgent.

Tomer W Tomer W
13 sept. 2015 19:14:00
1

esc_url este folosită pentru a genera un HTML valid (nu pentru a curăța input-ul). Ar trebui să folosești această funcție ori de câte ori nu ești 100% sigur că ceea ce vrei să afișezi este un HTML valid pentru acel context.

12 sept. 2015 22:11:13
Comentarii

Toată familia de funcții de escaping sunt în mod explicit pentru sanitizare.

Rarst Rarst
12 sept. 2015 23:29:02