Qual é a diferença entre o filtro esc_html e o filtro attribute_escape?

8

Qual é a diferença exata entre esc_html e attribute_escape filter?

esc_html() usa esc_html filter e esc_attr() usa attribute_escape filter . Ambos codificam < > & "'(menor que, maior que, e comercial, aspas duplas, aspas simples).

Estou interessado em saber o que exatamente os diferencia em termos de segurança (escape).

    
por djadmin 24.04.2017 / 14:36

1 resposta

8

Parece que, fora da caixa, não há diferença

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 );
}

A única diferença entre as duas funções é o filtro aplicado no final. O WordPress não adiciona nada a esses filtros, portanto, em uma instalação padrão do WP, eles não são operações. Eles são fornecidos no caso extremo de que alguém pode precisar deles.

Q & A rápido

Então, por padrão, eles são idênticos?

Sim! As funções esc_attr e esc_html têm a mesma implementação

Os filtros são idênticos?

A única diferença é que eles têm nomes diferentes, funcionam da mesma maneira, são usados da mesma maneira e nenhum filtro é usado no núcleo.

Os filtros fazem alguma coisa?

Não! Todo o escape é feito na função quando wp_check_invalid_utf8 e _wp_specialchars são chamados.

Os filtros não escapam, eles são uma oportunidade para os plugins fazerem verificações e processamentos adicionais.

Existem casos extremos?

Somente se você usar os filtros, digamos que você conectou em esc_html , mas não attribute_escape , ou vice-versa. Para uma instalação padrão do WP, as 2 funções são idênticas, sem diferença.

Por que attribute_escape e não esc_attr ?

Compatibilidade retroativa. Costumava haver uma função attribute_escape , que agora está marcada como obsoleta depois que as funções esc_ style foram adicionadas.

Por que eu usaria esses filtros?

¯\_(ツ)_/¯ esta seria uma situação rara. Algumas pessoas podem abusar da mesma forma que as APIs de tradução são abusadas para pesquisar o texto de substituição. Isso já é uma prática ruim, já que esses filtros são chamados muito, uma pequena perda de velocidade é ampliada milhares de vezes

Mas considere que, se você não tomar cuidado, poderá comprometer a segurança dessas funções desfazendo o escape que elas adicionaram ou adicionando conteúdo sem escape no final. Por esse motivo, os filtros são perigosos.

Preciso me preocupar com isso?

Não. Você só precisa se preocupar se você fez uso desses filtros, o que por si só deveria ter desencadeado alarmes vermelhos maciços que algo em seu desenvolvimento foi gravemente errado.

As funções esc_attr e esc_html são seguras de usar e escapam do conteúdo. Você tem uma obrigação ética e moral de usá-los se você valoriza a segurança do seu código

Isso significa que devo usar apenas esc_html ?

Não, fugir é definir expectativas. Se você está esperando um atributo, use esc_attr . Só porque é funcionalmente o mesmo no momento, não significa que isso não mudará no futuro com um lançamento de segurança

    
por Tom J Nowell 24.04.2017 / 15:33