WordPress: безопасность вывода данных

· WordPress, Безопасность и Разработка плагинов · 2 мин чтения

Безопасность вывода данных — это процесс замены небезопасных данных на безопасные.

Под заменой, я подразумеваю чистку данных от HTML и скрипт тэгов.

Когда вы отображаете какие-либо данные, важно их сделать безопасными для отображения. Иначе, при выводе вы можете получить, например, XSS (Cross-site scripting). Когда при загрузке страницы, у вас может запускаться JavaScript, который может перенаправлять пользователей на другую страницу — не самый лучший сценарий.

Замена

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

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

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

Чистка и перевод

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

Эти функции обертывают функции локализации, дополнительно добавляя безопасность (чистят данные):

esc_html_e( 'Hello World', 'bologer' );
// тоже самое что и 
echo esc_html( __( 'Hello World', 'bologer' ) );

Функции представленные ниже комбинируют локализацию и чистку данных:

esc_html__()
esc_html_e()
esc_html_x()
esc_attr__()
esc_attr_e()
esc_attr_x()

Собственная чистка

Если вам нужно создать собственный фильтр, тогда функция wp_kses() (произносится как «кисес») — это ваше решение.

Эта функция проверяет и заменяет 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 );