Функция wp_filter_kses()
предназначена для очистки контента, сохраняя только безопасные HTML-теги, которые определены в глобальной переменной $allowedtags
. Функция обрабатывает данные, экранированные с помощью слэшей. Если передается текст без экранирования, wp_filter_kses()
добавит экранирующие символы автоматически.
Эта функция предпочтительнее, чем wp_kses_data()
, так как работает в соответствии с фильтрами WordPress и обрабатывает массивы $_GET
, $_POST
, $_COOKIE
, $_SERVER
и $_REQUEST
на раннем этапе выполнения кода.
wp_filter_kses( string $data ): string
Параметры
- $data (строка) — обязательный параметр, содержащий текст, который нужно очистить. Ожидается, что строка уже экранирована.
Возвращаемое значение
Возвращает строку, содержащую отфильтрованный текст с разрешенными HTML-тегами.
Пример 1: Очистка HTML с сохранением разрешенных тегов
Этот пример показывает, как wp_filter_kses()
сохраняет безопасные теги, такие как <a>
, и удаляет нежелательные, например <div>
:
$text = "<a href='https://example.com'>Ссылка на сайт</a> <div>Текст в div</div>";
$filtered_text = wp_filter_kses( $text );
echo htmlspecialchars( $filtered_text );
Результат:
<a href='https://example.com'>Ссылка на сайт</a> Текст в div
В этом примере <a>
остается, так как он входит в $allowedtags
, а <div>
удаляется.
Пример 2: Обработка экранированного текста
Передача экранированной строки позволяет сохранить слэши, когда это необходимо. Посмотрим, как функция добавляет экранирующие слэши в текст без экранирования:
$text = '<p>Пример текста с "кавычками" и <span>HTML-тегом</span></p>';
$filtered_text = wp_filter_kses( $text );
echo htmlspecialchars( $filtered_text );
Результат:
<p>Пример текста с \"кавычками\" и HTML-тегом</p>
Тег <span>
удаляется, а строка автоматически экранируется.
Пример 3: Очистка пользовательского ввода с использованием глобального $allowedtags
Пользовательский ввод часто содержит разнородный HTML. Рассмотрим, как функция удаляет небезопасные теги, сохраняя только разрешенные:
$text = "<h2>Заголовок</h2><script>alert('XSS');</script><p>Допустимый текст</p>";
$filtered_text = wp_filter_kses( $text );
echo htmlspecialchars( $filtered_text );
Результат:
<h2>Заголовок</h2> Допустимый текст
Здесь <script>
удаляется как потенциально вредоносный, а <h2>
и <p>
сохраняются, поскольку они включены в $allowedtags
.
Важные аспекты wp_filter_kses()
- Фильтрация на раннем этапе — функция обрабатывает данные на уровне
plugins_loaded
, что делает ее особенно полезной для защиты пользовательских данных до их сохранения в базу данных. - Безопасность и предотвращение XSS — удаляет потенциально опасные HTML-теги, предотвращая внедрение вредоносного кода.
- Отличие от
wp_kses_data()
— функцияwp_kses_data()
очищает данные без работы со слэшами, тогда какwp_filter_kses()
добавляет экранирующие символы, если это необходимо.
Заключение
Функция wp_filter_kses()
— это мощный инструмент для очистки данных в WordPress, который обеспечивает безопасность пользовательского контента. Она предотвращает XSS-атаки и помогает сохранить только безопасные HTML-теги, заданные в $allowedtags
.