Perché dovrei usare esc_url?
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.

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 sì. L'escape dell'output è la pratica di sicurezza più basilare.

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?

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

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.

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.

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 & 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()

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.

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.
