Безопасность вывода данных — это процесс замены небезопасных данных на безопасные.
Под заменой, я подразумеваю чистку данных от 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 );