web-dev-qa-db-fra.com

Quelle est la différence entre esc_html, esc_attr, esc_html_e, etc.?

Le responsable de la sécurité m'a fait part de ses remarques et il m'a fait remarquer que je devrais utiliser le bon échappement des entrées utilisateur dans mon code. J'ai donc fait des recherches et trouvé des fonctions d'échappement.

Quelle est la différence entre eux? Quand devrais-je utiliser esc_html() et quand esc_attr()? Et quand devrais-je utiliser ces fonctions avec _e() à la fin?

7
baldrick

esc_html()échappe à une chaîne pour qu'elle ne soit pas analysée au format HTML. Les caractères tels que < sont convertis en &lt;, par exemple. Cela ressemblera au lecteur, mais cela signifie que si la valeur en sortie est <script>, le navigateur ne l’interprétera pas comme une balise de script réelle.

Utilisez cette fonction chaque fois que la valeur en sortie ne doit pas contenir HTML.

esc_attr()échappe à une chaîne pour pouvoir l'utiliser en toute sécurité dans un attribut HTML, tel que class="" par exemple. Cela empêche une valeur de sortir de l'attribut HTML. Par exemple, si la valeur est "><script>alert();</script> et que vous avez essayé de la générer dans un attribut HTML, la balise HTML en cours serait fermée et une balise de script serait ouverte. C'est dangereux. En échappant la valeur, il ne sera pas en mesure de fermer l'attribut HTML, ainsi que les balises et les sorties HTML non protégées.

Utilisez cette fonction pour générer une valeur dans un attribut HTML.

esc_url()échappe à une chaîne pour s'assurer qu'il s'agit d'une URL valide.

Utilisez cette fonction pour générer une valeur dans un attribut href="" ou src="".

esc_textarea()échappe à une valeur pour une utilisation sûre dans un élément <textarea>. En échappant une valeur avec cette fonction, cela empêche une valeur en sortie dans un <textarea< de fermer l'élément <textarea> et de générer son propre code HTML.

Utilisez cette fonction pour sortir une valeur dans un élément <textarea>.

esc_html() et esc_attr() ont également des versions se terminant par __(), _e() et _x(). Ce sont pour la sortie de chaînes traduisibles.

WordPress a des fonctions, __(), _e() et _x(), pour la sortie de texte pouvant être traduit. __() retourne une chaîne traduisible, _e() echoes une chaîne traduisible, et _x() renvoie une chaîne traduisible avec un contexte donné. Vous les avez probablement déjà vu auparavant.

Etant donné que vous ne pouvez pas forcément faire confiance à un fichier de traduction pour contenir des valeurs sûres, l'utilisation de ces fonctions lors de la sortie d'une chaîne pouvant être traduite garantit que les chaînes en cours de sortie ne peuvent pas causer le même problème que décrit ci-dessus.

Utilisez ces fonctions lors de la sortie de chaînes traduisibles.

13
Jacob Peattie

esc_html serait utilisé à l'intérieur du code HTML par exemple entre une balise <p>

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

esc_attr serait utilisé pour échapper les valeurs d'attributs sur les balises HTML comme ceci:

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

appliquer _e à la fin sert à l’utiliser avec des domaines de texte et le répercutera automatiquement pour vous, par exemple:

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

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

en plus de _e, il existe également __ qui fait la même chose que _e mais ne l’échange pas pour que vous puissiez le stocker dans une variable.

4
jrmd