В стандартной установке WordPress пользователи могут оставлять комментарии, которые по умолчанию допускают ограниченное использование HTML-тегов. Однако иногда возникает необходимость полностью запретить вставку HTML и JavaScript в комментариях, чтобы повысить безопасность сайта и избежать XSS-атак.
Почему важно ограничивать HTML и JavaScript в комментариях WordPress
Комментарии — это одна из точек входа, через которую злоумышленники могут попытаться внедрить вредоносный код. Несмотря на встроенные фильтры WordPress, некоторые теги могут пройти, особенно в случае кастомных тем или плагинов. Это может привести к выполнению вредоносных скриптов и компрометации сайта.
Кроме того, пользователи могут попытаться вставить нежелательные стили и скрипты, портящие внешний вид или функционал сайта. Поэтому запрет HTML и JS в комментариях — важный шаг по повышению безопасности и стабильности.
В этой статье рассмотрим, как реализовать такой запрет с помощью PHP-кода и представим примеры использования плагинов, которые помогут в этом.
Как запретить HTML и JavaScript в комментариях с помощью кода
Для полного удаления HTML и JavaScript из комментариев можно использовать фильтр pre_comment_content. Он позволяет обработать содержимое комментария до его сохранения в базу данных.
Ниже пример функции, которую можно добавить в файл functions.php вашей темы или в пользовательский плагин:
function wpbox_sanitize_comment_content($comment_content) {
// Удаляем все HTML-теги
$comment_content = wp_strip_all_tags($comment_content);
// Можно дополнительно удалить лишние пробелы
$comment_content = trim($comment_content);
return $comment_content;
}
add_filter('pre_comment_content', 'wpbox_sanitize_comment_content');
Эта функция удалит все HTML-теги, включая любые скрипты или стили, из комментария. В результате пользователь сможет оставить только обычный текст.
Дополнительная фильтрация для безопасности
Если хотите дополнительно обезопасить комментарии, можно использовать sanitize_text_field(), которая удалит все нежелательные символы, не относящиеся к тексту:
function wpbox_strict_sanitize_comment_content($comment_content) {
$comment_content = wp_strip_all_tags($comment_content);
$comment_content = sanitize_text_field($comment_content);
return $comment_content;
}
add_filter('pre_comment_content', 'wpbox_strict_sanitize_comment_content');
Этот вариант гарантирует, что в комментарии останется только простой текст без HTML и спецсимволов.
Как разрешить ограниченный набор HTML-тегов в комментариях
Иногда нужно запретить все, кроме нескольких разрешённых тегов, чтобы сохранить базовое форматирование, например <b>, <i> или <a>. Для этого можно использовать функцию wp_kses().
Пример фильтра с разрешением некоторых тегов:
function wpbox_allowed_html_in_comments($comment_content) {
$allowed_tags = array(
'a' => array(
'href' => true,
'title' => true,
'rel' => true
),
'b' => array(),
'i' => array(),
'strong' => array(),
'em' => array(),
);
return wp_kses($comment_content, $allowed_tags);
}
add_filter('pre_comment_content', 'wpbox_allowed_html_in_comments');
Такой подход полезен, если нужна минимальная разметка, но при этом исключается возможность вставить скрипты или стили.
Использование плагинов для управления безопасностью комментариев
Если не хочется писать код, можно воспользоваться готовыми плагинами с настройками фильтрации комментариев:
- Disable HTML in Comments — простой плагин, который полностью запрещает HTML в комментариях.
- Clearfy Pro — комплексный плагин для оптимизации и безопасности сайта, включает функции фильтрации комментариев и запрета HTML/JS.
- Antispam Bee — плагин для защиты от спама, который также позволяет фильтровать нежелательный код в комментариях.
Эти решения подойдут, если вы предпочитаете готовые инструменты с графическим интерфейсом и дополнительными опциями.
Особенности и тестирование запрета HTML/JS в комментариях
После внедрения запрета обязательно протестируйте работу с разными типами комментариев. Попробуйте вставить:
- Теги HTML, например
<b>Жирный текст</b> - JavaScript-код, например
<script>alert('XSS')</script> - Ссылки и простое форматирование
Проверьте, что на фронтенде выводится только разрешённый или очищенный текст, а скрипты не выполняются.
Также обратите внимание на фильтрацию в RSS-лентах и уведомлениях, чтобы вредоносный код не попал туда.
Заключение
Запрет вставки HTML и JavaScript в комментариях WordPress — важная мера безопасности для большинства сайтов. Она помогает избежать XSS-атак и поддержать чистоту контента. Вы можете реализовать это с помощью простого кода через фильтр pre_comment_content или использовать готовые плагины, например Clearfy Pro, который предлагает расширенные возможности безопасности и оптимизации.