Qual è la differenza tra esc_html, esc_attr, esc_html_e e così via?


12

Ho ricevuto feedback dal ragazzo della sicurezza e mi ha fatto notare che dovrei usare la corretta evasione dell'input dell'utente nel mio codice. Quindi ho fatto qualche ricerca e ho trovato funzioni di fuga.

Qual è la differenza tra loro? Quando dovrei usare esc_html()e quando esc_attr()? E quando dovrei usare queste funzioni _e()alla fine?



2
Sì, e questo mi ha confuso ancora di più :(
baldrick il

Risposte:


20

esc_html()esegue l'escape di una stringa in modo che non venga analizzata come HTML. Ad esempio, i caratteri come <vengono convertiti in &lt;. Questo sembrerà lo stesso per il lettore, ma significa che se il valore che viene emesso è <script>allora non verrà interpretato dal browser come un vero tag di script.

Utilizzare questa funzione ogni volta che il valore in uscita non deve contenere HTML.

esc_attr()sfugge a una stringa in modo che sia sicuro da usare in un attributo HTML, come class=""ad esempio. Ciò impedisce la fuoriuscita di un valore dall'attributo HTML. Ad esempio, se il valore è "><script>alert();</script>e si è tentato di emetterlo in un attributo HTML, si chiuderebbe il tag HTML corrente e si aprirà un tag script. Questo non è sicuro. Sfuggendo al valore non sarà in grado di chiudere l'attributo HTML e il tag e generare HTML non sicuro.

Utilizzare questa funzione quando si genera un valore all'interno di un attributo HTML.

esc_url() esegue l'escape di una stringa per assicurarsi che sia un URL valido.

Utilizzare questa funzione quando si genera un valore all'interno di un attributo href=""o src="".

esc_textarea()sfugge a un valore in modo che sia sicuro da usare in un <textarea>elemento. Escludendo un valore con questa funzione, impedisce che un valore in uscita all'interno di un <textarea<chiuda l' <textarea>elemento e produca il proprio HTML.

Utilizzare questa funzione quando si genera un valore all'interno di un <textarea>elemento.

esc_html()e esc_attr()hanno anche versioni che terminano con __(), _e()e _x(). Questi sono per produrre stringhe traducibili.

WordPress ha funzioni, __(), _e()e _x(), per l'output di testo che può essere tradotto. __() restituisce una stringa traducibile, fa _e() eco a una stringa traducibile e _x()restituisce una stringa traducibile con un determinato contesto. Probabilmente li hai già visti.

Poiché non è possibile ritenere che un file di traduzione contenga valori sicuri, l'utilizzo di queste funzioni durante l'output di una stringa traducibile garantisce che le stringhe in uscita non possano causare lo stesso problema descritto sopra.

Utilizzare queste funzioni quando si producono stringhe traducibili.


2
Si noti che per impostazione predefinita, non vi è alcuna differenza tra esc_htmle esc_attr, viene utilizzato lo stesso codice (hanno solo un filtro non utilizzato diverso): wordpress.stackexchange.com/questions/264698/…
baptx

4

esc_htmlverrebbe utilizzato all'interno di HTML, ad esempio tra un <p>tag

<p><?php echo esc_html( $some_variable ); ?></p>

esc_attr sarebbe usato per sfuggire ai valori degli attributi sui tag html in questo modo:

<p my-attribute="<?php echo esc_attr( $some_variable ); ?>"></p>

applicare _ealla fine è per usarlo con domini di testo e lo farà automaticamente eco per te ad esempio:

<p><?php esc_html_e( 'some-text', 'text-domain' ); ?></p>

<p my-attribute="<?php esc_attr_e( 'some-text', 'text-domain' ); ?>"></p>

oltre a _ec'è anche quello __che fa lo stesso _ema non lo fa eco così puoi memorizzarlo in una variabile.


2
_enon è solo per l'eco, è per la localizzazione. Quindi dovrebbe essere usato solo quando una stringa viene passata alla funzione e dovrebbe includere un dominio di testo. Il tuo ultimo esempio lo sta abusando.
Jacob Peattie,

@JacobPeattie my bad, aggiornerò ... EDIT Fixed
jrmd
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.