Должен ли вывод HTML передаваться через esc_html () И wp_kses ()?

11

Я запутался в различном использовании esc_html()и wp_kses(). Я понимаю, что esc_html()преобразует специальные символы в их сущность HTML и wp_kses()удаляет нежелательные теги (например, <script>), но я не уверен, в каких контекстах их следует использовать вместе или по отдельности.

Если я пропущу ненадежный HTML-код esc_html(), то любой JavaScript-код будет отображаться в виде обычного текста, а не отображаться браузером, так что это безопасно на этом этапе, верно? Единственная причина, по которой он wp_kses()тоже должен быть запущен - это не показывать необработанный скрипт?

По сути, esc_html()это делает его безопасным и wp_kses()красивым. Это правильно?

Йен Данн
источник

Ответы:

16

Общее правило, по крайней мере в том виде, в котором его поддерживает Марк Джакит , заключается в дезинфекции на входе, на выходе на выходе (следствием этого правила является ранняя дезинфекция, поздний выход ).

Итак: используйте фильтры очистки (например, kses()семейство) при хранении недоверенных данных в базе данных и используйте экранирующие фильтры (например, esc_*()семейство) при выводе ненадежных данных в шаблоне .

Чип Беннетт
источник
14

Функции kses следует использовать, когда вы хотите разрешить использование некоторого подмножества html. Например, комментарии допускают наличие в них некоторого HTML-кода для полужирного шрифта, курсива, ссылок и тому подобного.

Функция esc_html должна использоваться для полного выхода из html. Никакой HTML не пройдет через это, не будучи преобразованным во что-то, что будет интерпретировано браузером как не HTML.

эфирное масло
источник