¿Cuál es la diferencia exacta entre esc_htmly attribute_escapefiltro?
esc_html()usos esc_html filtery esc_attr()usos attribute_escape filter. Ambos codifican <> & "'(menor que, mayor que, ampersand, comillas dobles, comillas simples).
Me interesa saber qué los hace diferentes en términos de seguridad (escape).

esc_attrque se escapa y queesc_htmlno es útil, después de todo, ¿por qué no usarlo enesc_htmltodas partes? Si es obvio para usted, puede no parecer una buena pregunta, pero no es obvio para el que pregunta cómo difieren estas 2 funciones dado que ambas escapan de los personajes esperadosRespuestas:
Parece que fuera de la caja, no hay diferencia
La única diferencia entre las 2 funciones es el filtro aplicado al final. WordPress no agrega nada a estos filtros, por lo que en una instalación estándar de WP no funcionan. Se proporcionan en el caso límite de que alguien pueda necesitarlos.
Preguntas y respuestas rápidas
Entonces, ¿por defecto son idénticos?
¡Si! Las funciones
esc_attryesc_htmltienen la misma implementación¿Son idénticos los filtros?
La única diferencia es que tienen nombres diferentes, funcionan de la misma manera, se usan de la misma manera y ninguno de los filtros se usa en el núcleo.
¿Los filtros hacen algo?
¡No! Todo el escape se realiza en la función cuando
wp_check_invalid_utf8y_wp_specialcharsse llama.Los filtros no escapan, son una oportunidad para que los complementos realicen verificaciones y procesamientos adicionales.
¿Hay casos límite?
Solo si usa los filtros, digamos que se conectó
esc_htmlpero noattribute_escape, o viceversa. Para una instalación WP estándar, las 2 funciones son idénticas, sin diferencia.¿Por qué
attribute_escapey noesc_attr?Compatibilidad al revés. Solía haber una
attribute_escapefunción, que ahora está marcada como obsoleta después de queesc_se agregaron las funciones de estilo.¿Por qué usaría estos filtros?
¯\_(ツ)_/¯Esta sería una situación rara. Algunas personas pueden abusar de él de la misma manera que se abusa de las API de traducción para buscar texto de reemplazo. Esto ya es una mala práctica, ya que esos filtros se llaman mucho, una pequeña pérdida de velocidad se magnifica miles de vecesPero tenga en cuenta que si no tiene cuidado, puede comprometer la seguridad de estas funciones deshaciendo el escape que agregaron o agregando contenido no escapado al final. Por eso los filtros son peligrosos.
¿Debo preocuparme por esto?
No. Solo debe preocuparse si ha utilizado esos filtros, que por sí mismos deberían haber activado alarmas rojas masivas de que algo en su desarrollo salió muy mal.
Las funciones
esc_attryesc_htmlson seguras de usar, y escapar de contenido. Tiene la obligación ética y moral de usarlos si valora la seguridad de su código¿Esto significa que debería usar
esc_html?No, escapar se trata de establecer expectativas. Si espera un atributo, use
esc_attr. El hecho de que sea funcionalmente el mismo en este momento no significa que eso no cambie en el futuro con un lanzamiento de seguridadfuente
esc_htmlfiltro se escape y elattribute_escapefiltro no, o viceversa.