Perché dovrei usare esc_url?

12 set 2015, 22:00:12
Visualizzazioni: 30.3K
Voti: 20

Questa cosa rende il mio codice più difficile. La documentazione di WordPress spiega l'uso di esc_url parlando vagamente di sicurezza. Ma ne vale davvero la pena?

Per esempio, qual è l'importante beneficio pratico per la sicurezza usando

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

invece di

<?php echo home_url() ?>

PS: Non sto parlando dello sviluppo di un tema, ma di un sito specifico.

0
Tutte le risposte alla domanda 4
4
20

Se consulti la documentazione sulla Validazione dei Dati, troverai quanto segue riguardo alla funzione:

Utilizza sempre esc_url quando sanifici gli URL (nei nodi di testo, nei nodi degli attributi o in qualsiasi altro luogo). Rifiuta gli URL che non hanno uno dei protocolli consentiti [...], elimina i caratteri non validi e rimuove i caratteri pericolosi.

Ecco qui — un beneficio pratico per la sicurezza. Protocollo valido, nessun carattere ambiguo.

La risposta riguardo alla necessità è decisamente . L'escape dell'output è la pratica di sicurezza più basilare.

12 set 2015 23:33:10
Commenti

Con tutto il rispetto, non riesco a vedere come il link alla home, ad esempio, possa rappresentare un rischio per la sicurezza. Forse queste linee guida sono per la creazione di temi e non si applicano al codice "privato"? Dopotutto, potrebbe essere meglio hardcodare l'indirizzo della home e altri link in html e non usare php affatto se ci sono rischi di sicurezza?

IXN IXN
13 set 2015 00:23:39

È molto più produttivo applicare le pratiche di sicurezza in modo coerente e universale, piuttosto che discutere se ogni singolo caso ne valga la pena. :)

Rarst Rarst
13 set 2015 01:40:34

D'altra parte una risorsa suggerita dal Codex stabilisce Regola N. 3: Fidati di WordPress. Questo sembra raccomandare contro l'eccessiva sanificazione delle funzioni core di wp come home_url(), se usate nel loro contesto appropriato. Secondo questa raccomandazione, mi sarei aspettato che home_url eseguisse la propria sanificazione.

Franco Franco
11 giu 2017 12:37:48

Scusa, sono abbastanza nuovo su questo argomento, ma qualcuno potrebbe fornire un esempio in cui home_url() o forse get_permalink() (dove per quanto ne so dovrebbe essere usato anche esc_url()) restituisce un URL non valido o non sanificato (?)? Non voglio essere pigro o testardo, quindi un esempio potrebbe aiutarmi a capire l'utilizzo.

SunnyRed SunnyRed
25 lug 2022 22:01:34
0

Altre cose da tenere a mente riguardo a esc_url() è che va usata per situazioni come <a href="SANITIZZA_QUESTO_URL">il_tuo_testo</a>. Se devi utilizzare l'URL nel tuo output HTML, come un attributo href per un link, o un attributo src per un elemento immagine, dovresti usare esc_url().

esc_url_raw() è per altri casi in cui vuoi un URL pulito, ma non vuoi che le entità HTML vengano codificate. Quindi qualsiasi utilizzo non-HTML (database, redirect) dovrebbe usare questa funzione.

La funzione esc_url_raw() fa praticamente la stessa cosa di esc_url(), ma non decodifica le entità, cioè non sostituirà & con &#038 e così via. Come ha sottolineato Mark, è sicuro usare esc_url_raw() nelle query al database, redirect e funzioni HTTP, come `wp_remote_get()' per maggiori informazioni su esc_url_raw()

13 set 2015 00:29:11
2

beh, tutti gli input degli utenti dovrebbero essere sanificati... Se l'URL che inserisci non è un input utente (ad esempio un'impostazione del sito da parte di qualcuno di cui ti fidi completamente, valori hardcoded) allora puoi evitare di usare esc-url.

ma se potessi iniettare quell'URL nel tuo sito, potrei facilmente iniettare codice JS, codice di reindirizzamento... o addirittura codice lato server in alcune situazioni.

questo può portare a hijacking di sessione, furto degli account dei tuoi utenti e altre spiacevoli conseguenze.

Modifica:

Nel tuo esempio esc_url( home_url( '/' ) );
opera su un valore semi-hardcoded! quindi esc_url può essere eliminato.
Detto questo, non vedo comunque perché fare distinzioni tra quando c'è una minaccia e quando non c'è e in generale suggerirei di mantenere esc_url() per ogni valore.

13 set 2015 10:19:58
Commenti

"Impostazione del sito da parte di qualcuno di cui ti fidi" è ancora letteralmente input dell'utente. :)

Rarst Rarst
13 set 2015 18:57:21

@Rarst sì, sono d'accordo con te, ma lui era così "disgustato" dall'usare esc_url, che sono stato un po' più indulgente.

Tomer W Tomer W
13 set 2015 19:14:00
1

esc_url viene utilizzata per generare un HTML valido (non per sanitizzare l'input). Dovresti usare questa funzione ogni volta che non sei sicuro al 100% che ciò che vuoi mostrare sia un HTML valido per quel contesto.

12 set 2015 22:11:13
Commenti

Tutte le funzioni della famiglia di escaping sono espressamente dedicate alla sanificazione.

Rarst Rarst
12 set 2015 23:29:02