В чем разница между фильтром esc_html
и attribute_escape
фильтром?
esc_html()
использует esc_html filter
и esc_attr()
использует attribute_escape filter
. Оба кодируют <> & "'(меньше, больше, амперсанд, двойная кавычка, одинарная кавычка).
Мне интересно знать, что именно отличает их с точки зрения безопасности (побега).
esc_attr
ускользает, чтоesc_html
не было бы полезно, в конце концов, почему бы не использоватьesc_html
везде? Если это очевидно для вас, это может показаться не хорошим вопросом, но для специалиста не очевидно, как эти две функции отличаются, поскольку они обе избегают ожидаемых символовОтветы:
Казалось бы, из коробки нет разницы
Единственная разница между двумя функциями - это фильтр, применяемый в конце. WordPress ничего не добавляет к этим фильтрам, поэтому при стандартной установке WP они не работают. Они предоставлены в крайнем случае, что кому-то они могут понадобиться.
Быстрый Q & A
Так по умолчанию они идентичны?
Да! Функции
esc_attr
иesc_html
имеют одинаковую реализациюФильтры идентичны?
Разница лишь в том, что у них разные имена, они работают одинаково, они используются одинаково, и ни один фильтр не используется в ядре.
Фильтры что-нибудь делают?
Нет! Все экранирование выполняется в функции, когда
wp_check_invalid_utf8
и_wp_specialchars
вызываются.Фильтры не делают экранирования, они позволяют плагинам выполнять дополнительные проверки и обработку.
Есть ли крайние случаи?
Только если вы используете фильтры, скажем, вы подключены,
esc_html
но не подключеныattribute_escape
, или наоборот. Для стандартной установки WP две функции идентичны, без разницы.Почему
attribute_escape
и нетesc_attr
?Обратная совместимость. Раньше была
attribute_escape
функция, которая теперь помечена как устаревшая послеesc_
добавления функций стиля.Зачем мне использовать эти фильтры?
¯\_(ツ)_/¯
это было бы редкой ситуацией. Некоторые люди могут злоупотреблять им так же, как и API-интерфейсы перевода для поиска и замены текста. Это уже плохая практика, так как эти фильтры часто называют малыми потерями в скорости, которые увеличиваются в тысячи раз.Но учтите, что если вы не будете осторожны, вы можете поставить под угрозу безопасность этих функций, отменив экранирование, которое они добавили, или добавив неэкранированный контент в конце. По этой причине фильтры опасны.
Нужно ли беспокоиться об этом?
Нет. Вам нужно беспокоиться, только если вы использовали эти фильтры, которые сами по себе должны были вызвать массивные красные сигналы тревоги, что что-то в вашей разработке пошло не так.
Функции
esc_attr
иesc_html
безопасны в использовании, и экранируют контент. У вас есть этическое и моральное обязательство использовать их, если вы цените безопасность своего кодексаЗначит ли это, что я должен просто использовать
esc_html
?Нет, побег - это все, что связано с ожиданиями. Если вы ожидаете атрибут, используйте
esc_attr
. То, что в настоящее время функционально он не изменился, не означает, что в будущем он не изменится после выпуска системы безопасности.источник
esc_html
фильтр убегал, аattribute_escape
фильтр - нет, или наоборот.