Я получил ответ от охранника, и он указал, что я должен использовать правильное экранирование пользовательского ввода в моем коде. Итак, я провел некоторое исследование и нашел экранирующие функции.
Какая разница между ними? Когда я должен использовать esc_html()
и когда esc_attr()
? И когда я должен использовать эти функции _e()
в конце?
Ответы:
esc_html()
экранирует строку, чтобы она не анализировалась как HTML. Например,<
такие символы преобразуются в<
. Для читателя это будет выглядеть так же, но это означает, что если выводится значение,<script>
оно не будет интерпретироваться браузером как фактический тег сценария.Используйте эту функцию всякий раз, когда выводимое значение не должно содержать HTML.
esc_attr()
экранирует строку, чтобы ее можно было безопасно использовать в атрибуте HTML,class=""
например. Это предотвращает выход значения из атрибута HTML. Например, если значение равно"><script>alert();</script>
и вы пытались вывести его в атрибуте HTML, он закроет текущий тег HTML и откроет тег сценария. Это небезопасно. Экранируя значение, он не сможет закрыть атрибут и тег HTML и вывести небезопасный HTML.Используйте эту функцию при выводе значения внутри атрибута HTML.
esc_url()
экранирует строку, чтобы убедиться, что это правильный URL.Используйте эту функцию при выводе значения внутри атрибута
href=""
илиsrc=""
.esc_textarea()
экранирует значение, чтобы его можно было безопасно использовать в<textarea>
элементе. Экранируя значение с помощью этой функции, он предотвращает<textarea<
закрытие<textarea>
элемента и вывод его собственного HTML-кода.Используйте эту функцию при выводе значения внутри
<textarea>
элемента.esc_html()
аesc_attr()
также есть версии, оканчивающиеся на__()
,_e()
и_x()
. Они предназначены для вывода переводимых строк.WordPress имеет функции,
__()
,_e()
и_x()
, для вывода текста , который может быть переведен.__()
возвращает переводимую строку,_e()
повторяет переводимую строку и_x()
возвращает переводимую строку с заданным контекстом. Вы, наверное, видели их раньше.Поскольку вы не можете доверять файлу перевода, содержащему безопасные значения, использование этих функций при выводе переводимой строки гарантирует, что выводимые строки не могут вызвать ту же проблему, описанную выше.
Используйте эти функции при выводе переводимых строк.
источник
esc_html
иesc_attr
, используется один и тот же код (у них просто другой неиспользуемый фильтр): wordpress.stackexchange.com/questions/264698/…esc_html
будет использоваться внутри HTML, например, между<p>
тегомesc_attr
будет использоваться для экранирования значений атрибутов в HTML-тегах следующим образом:применение
_e
до конца предназначено для использования его с текстовыми доменами и автоматически отобразит его для вас, например:в дополнение к
_e
этому есть также,__
который делает то же самое,_e
но не отображает его, поэтому вы можете сохранить его в переменной.источник
_e
не только для повторения, это для локализации. Поэтому его следует использовать только в том случае, если в функцию передана строка, и она должна содержать текстовый домен. Ваш последний пример неправильно использует это.