Il semblerait que hors de la boîte, il n'y a pas de différence
function esc_html( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in HTML.
*
* Text passed to esc_html() is stripped of invalid or special characters
* before output.
*
* @since 2.8.0
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( 'esc_html', $safe_text, $text );
}
function esc_attr( $text ) {
$safe_text = wp_check_invalid_utf8( $text );
$safe_text = _wp_specialchars( $safe_text, ENT_QUOTES );
/**
* Filters a string cleaned and escaped for output in an HTML attribute.
*
* Text passed to esc_attr() is stripped of invalid or special characters
* before output.
*
* @since 2.0.6
*
* @param string $safe_text The text after it has been escaped.
* @param string $text The text prior to being escaped.
*/
return apply_filters( 'attribute_escape', $safe_text, $text );
}
La seule différence entre les 2 fonctions est le filtre appliqué à la fin. WordPress n'ajoute rien à ces filtres, donc dans une installation WP standard, ce ne sont pas des opérations. Ils sont fournis dans le cas de bord que quelqu'un pourrait en avoir besoin.
Q & R rapide
Donc par défaut, ils sont identiques?
Oui! Les fonctions esc_attr
et esc_html
ont la même implémentation
Les filtres sont-ils identiques?
La seule différence est qu'ils ont des noms différents, ils fonctionnent de la même manière, ils sont utilisés de la même manière et aucun filtre n'est utilisé dans le noyau.
Les filtres font-ils quelque chose?
Non! Tout l'échappement se fait dans la fonction quand wp_check_invalid_utf8
et _wp_specialchars
sont appelés.
Les filtres ne font pas l'échappement, ils sont l'occasion pour les plugins de faire des vérifications et des traitements supplémentaires.
Y a-t-il des cas de bord?
Seulement si vous utilisez les filtres, dites que vous êtes connecté esc_html
mais pas attribute_escape
, ou vice versa. Pour une installation WP standard, les 2 fonctions sont identiques, sans différence.
Pourquoi attribute_escape
et non esc_attr
?
Rétrocompatibilité. Il y avait une attribute_escape
fonction, qui est maintenant marquée comme obsolète après l' esc_
ajout des fonctions de style.
Pourquoi devrais-je utiliser ces filtres?
¯\_(ツ)_/¯
ce serait une situation rare. Certaines personnes peuvent en abuser de la même manière que les API de traduction sont utilisées abusivement pour rechercher remplacer du texte. C'est déjà une mauvaise pratique car ces filtres sont souvent appelés une petite perte de vitesse est agrandie des milliers de fois
Mais considérez que si vous ne faites pas attention, vous pouvez compromettre la sécurité de ces fonctions en annulant l'échappement qu'elles ont ajouté ou en ajoutant du contenu non échappé à la fin. Pour cette raison, les filtres sont dangereux.
Dois-je m'inquiéter à ce sujet?
Non. Vous ne devez vous inquiéter que si vous avez utilisé ces filtres, qui en eux-mêmes auraient dû déclencher des alarmes rouges massives indiquant que quelque chose dans votre développement s'était mal passé.
Les fonctions esc_attr
et esc_html
sont sûrs à utiliser et échappent au contenu. Vous avez une obligation éthique et morale de les utiliser si vous appréciez la sécurité de votre code
Est-ce à dire que je devrais simplement utiliser esc_html
?
Non, l'évasion consiste à définir des attentes. Si vous attendez un attribut, utilisez esc_attr
. Ce n'est pas parce qu'il est fonctionnellement le même pour le moment que cela ne changera pas à l'avenir avec une version de sécurité