web-dev-qa-db-fra.com

Quelle est la différence entre filtre esc_html et filtre attribut_escape?

Quelle est la différence exacte entre les filtres esc_html et attribute_escape?

esc_html() utilise esc_html filter et esc_attr() utilise attribute_escape filter. Les deux codes <> & "'(inférieur à, supérieur à, esperluette, guillemet double, guillemet simple).

Je suis intéressé de savoir ce qui les rend exactement différent en termes de sécurité (échapper).

7
djadmin

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 standard WP, ils ne sont pas des opérations. Ils sont prévus dans le cas Edge que quelqu'un pourrait en avoir besoin.

Q & A 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, qu'ils fonctionnent de la même manière, qu'ils sont utilisés de la même manière et qu'aucun filtre n'est utilisé dans le noyau.

Les filtres font-ils quelque chose?

Non! Tout l'échappement est fait dans la fonction quand wp_check_invalid_utf8 et _wp_specialchars sont appelés.

Les filtres ne font pas l'échappement, ils sont une opportunité pour les plugins d'effectuer des vérifications et des traitements supplémentaires.

Y a-t-il des cas Edge?

Si vous utilisez les filtres, dites que vous êtes connecté à esc_html mais pas attribute_escape ou vice versa. Pour une installation standard WP, les 2 fonctions sont identiques, sans différence.

Pourquoi attribute_escape et non esc_attr?

Rétrocompatibilité. Auparavant, il existait une fonction attribute_escape qui est désormais marquée comme obsolète après l’ajout des fonctions de style esc_.

Pourquoi utiliser ces filtres?

¯\_(ツ)_/¯ ce serait une situation rare. Certaines personnes peuvent en abuser de la même manière que les API de traduction pour rechercher du texte de remplacement. C'est déjà une mauvaise pratique car ces filtres sont souvent appelés, une petite perte de vitesse est amplifiée 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 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 n'avez à vous inquiéter que si vous avez utilisé ces filtres, qui auraient dû déclencher d'énormes alarmes rouges signalant que quelque chose dans votre développement avait mal tourné.

Les fonctions esc_attr et esc_html peuvent être utilisées en toute sécurité et échappent au contenu. Vous avez l'obligation morale et morale de les utiliser si vous accordez de l'importance à la sécurité de votre code.

Cela signifie-t-il que je devrais simplement utiliser esc_html?

Non, s’échapper consiste à établir des attentes. Si vous attendez un attribut, utilisez esc_attr. Ce n'est pas parce que son fonctionnement est identique pour le moment que cela ne changera pas à l'avenir avec une mise à jour de sécurité.

8
Tom J Nowell