Perché dovrei usare esc_url?


12

Questa cosa rende difficile la mia codifica. Il codice Wordpress spiega l'uso di esc_url parlando vagamente di sicurezza. Ma vale davvero la pena?

Ad esempio, qual è il vantaggio pratico e importante per la sicurezza che utilizza

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

invece di

<?php echo home_url() ?>

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

Risposte:


12

Se si controlla la documentazione sulla convalida dei dati che segue deve dire sulla funzione:

Utilizzare sempre esc_url durante la disinfezione degli URL (nei nodi di testo, nei nodi di attributo o in qualsiasi altro luogo). Rifiuta gli URL che non dispongono di uno dei protocolli autorizzati [...] autorizzati, elimina i caratteri non validi e rimuove i caratteri pericolosi.

Ecco qua: vantaggi pratici per la sicurezza. Protocollo valido, nessun personaggio oscuro.

La risposta sulla necessità è decisamente . L'evasione dell'output è la pratica di sicurezza più basilare.


2
Con tutto il rispetto, non riesco a vedere come il collegamento 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 codificare l'indirizzo di casa e altri collegamenti in html e non usare affatto php se ci sono rischi per la sicurezza?
IXN,

9
È molto più produttivo applicare pratiche di sicurezza coerenti e universali, piuttosto che discutere se ne valga la pena. :)
Rarst

7
D'altra parte una risorsa suggerita dal Codex stabilisce la Regola n. 3: Trust WordPress . Questo sembra sconsigliare di sovradimensionare le funzioni core di wp come home_url(), se usate nel loro giusto contesto. Secondo questa raccomandazione, mi sarei aspettato home_urldi eseguire la sua sanificazione.
Franco,

3

bene, tutti gli input dell'utente dovrebbero essere disinfettati ... Se l'URL che inietti non è l'input dell'utente (ad es. impostazione del sito da parte di qualcuno di cui ti fidi, valori codificati), potresti liberarti da esc-url.

ma se potessi inserire quell'URL nel tuo sito, potrei facilmente iniettare il codice js o il codice di reindirizzamento ... o anche il codice lato server in alcune situazioni.

ciò può comportare il dirottamento della sessione e il furto degli account degli utenti e altre cattive opzioni.

Modificare:

Nel tuo esempio esc_url( home_url( '/' ) );
ha operato su un valore semi-codificato! quindi esc_urlpuò essere eliminato.
Detto questo, non vedo ancora perché preoccuparsi delle distinzioni tra quando c'è una minaccia e quando non c'è e generalmente suggerirei di mantenere esc_url () per ogni valore.


3
"L'impostazione del sito da parte di qualcuno di cui ti fidi" è ancora letteralmente l'input dell'utente. :)
Rarst

@Prima si, sono con te, ma era così "disgustato" usando esc_url, sono stato un po 'più indulgente.
Tomer W,

2

Un'altra cosa da tenere a mente esc_url()è qualcosa come <a href="SANITIZE_THIS_URL">your_text</a>.se utilizzerai 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 si desidera un URL pulito, ma non si desidera codificare le entità HTML. Quindi qualsiasi utilizzo non HTML (DB, reindirizzamento) lo userebbe.

La esc_url_raw()funzione farà praticamente la stessa cosa esc_url(), ma non decodificherà le entità, il che significa che non sostituirà & con & # 038 e così via. Come ha sottolineato Mark, è sicuro da usare esc_url_raw()nelle query del database, reindirizzamenti e funzioni HTTP, come `wp_remote_get () 'per maggiori informazioni su esc_url_raw ()


1

esc_url viene utilizzato per produrre un codice HTML valido (non per disinfettare l'input). Dovresti usarlo ogni volta che non sei sicuro al 100% che quello che vuoi produrre sia un HTML valido per quel contesto.


Tutta la famiglia di funzioni di escape è esplicitamente per la sanificazione.
Rarst
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.