3.4 Безопасность вывода

Обеспечение безопасности вывода – это процесс экранирования выходных данных.

Эскейпинг означает удаление нежелательных данных, таких как неверно сформированный HTML или теги скрипта.

Всякий раз, когда вы визуализируете данные, убедитесь, что они правильно экранируются. Экранирование выходных данных предотвращает XSS атаки (межсайтовый скриптинг).

Межсайтовый скриптинг (XSS) – это тип уязвимости компьютерной безопасности, обычно встречающейся в веб-приложениях. XSS позволяет злоумышленникам внедрять клиентские скрипты в веб-страницы, просматриваемые другими пользователями. Уязвимость межсайтового скриптинга может использоваться злоумышленниками для обхода контроля доступа, например, с помощью правила ограничения домена (same-origin policy).

Escaping (экранирование)

Escaping или экранирование помогает защитить ваши данные перед их отображением для конечного пользователя. WordPress имеет несколько вспомогательных функций, которые можно использовать для большинства распространенных сценариев.

  • esc_html() – Используйте эту функцию в любое время, когда HTML-элемент заключает в себе участок отображаемых данных.
  • esc_url() – Используйте эту функцию для всех URL, включая те, которые находятся в атрибутах src и href HTML-элемента.
  • esc_js() – Используйте эту функцию для встроенного Javascript.
  • esc_attr() – Используйте эту функцию для всего остального, что выводится в атрибут HTML-элемента.

Большинство функций WordPress правильно подготавливают данные для вывода, так что вам не нужно будет снова экранировать данные. Например, вы можете безопасно вызвать функцию the_title() без экранирования.

Эскейпинг с локализацией

Вместо того, чтобы использовать echo для вывода данных, обычно используются функции локализации WordPress, такие как _e() или __().

Эти функции просто обертывают функцию локализации внутри экранирующей функции:

esc_html_e( 'Hello World', 'text_domain' );
// точно так же, как
echo esc_html( __( 'Hello World', 'text_domain' ) );

Эти вспомогательные функции сочетают в себе локализацию и экранирование:

Собственный Escaping

В случае, если вам необходимо экранировать ваш вывод определенным образом, вам пригодится функция wp_kses() (произносится как “поцелуй” – kisses).

Эта функция гарантирует, что в вашем выводе будут присутствовать только указанные HTML элементы, атрибуты и значения атрибутов, и нормализует HTML сущности.

$allowed_html = [
'a'      => [
'href'  => [],
'title' => [],
],
'br'     => [],
'em'     => [],
'strong' => [],
];
echo wp_kses( $custom_content, $allowed_html );

wp_kses_post() – функция обёртывания для wp_kses, где $allowed_html – набор правил, используемых для содержимого записи.

echo wp_kses_post( $post_content );

Наверх ↑