Добавление заголовков безопасности Spring Security в WPForms на WordPress

Диагностика проблемы безопасности форм WPForms

WPForms — популярный плагин для создания форм в WordPress. Однако по умолчанию он не настраивает HTTP-заголовки безопасности, которые помогают защитить сайт от различных атак (XSS, Clickjacking, MIME sniffing и др.). Это особенно важно при работе с формами, где обрабатываются пользовательские данные.

Для диагностики текущих заголовков можно использовать инструмент браузера (вкладка Network → Response Headers) или онлайн-сервисы типа securityheaders.com. Если вы не видите заголовков Content-Security-Policy, X-Content-Type-Options, X-Frame-Options или Strict-Transport-Security, значит необходимо их добавить.

Пошаговое решение: как добавить заголовки безопасности Spring Security в WordPress с WPForms

1. Добавление заголовков через functions.php темы

Самый простой способ — добавить нужные заголовки в файл functions.php активной темы. Ниже пример кода, который добавляет базовые заголовки безопасности:

function wpforms_add_security_headers() {
    // Запретить отображение сайта в iframe (Clickjacking)
    header('X-Frame-Options: SAMEORIGIN');
    // Отключить MIME sniffing
    header('X-Content-Type-Options: nosniff');
    // Запретить выполнение скриптов из недоверенных источников
    header("Content-Security-Policy: default-src 'self'; script-src 'self' https://ajax.googleapis.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:;");
    // Включить HSTS для HTTPS
    header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
}
add_action('send_headers', 'wpforms_add_security_headers');

2. Ограничение заголовков только к страницам с WPForms

Если хотите добавить заголовки только для страниц с формами WPForms (чтобы не ломать другие части сайта), нужно определить, есть ли форма на странице:

function wpforms_add_security_headers_conditional() {
    if (function_exists('wpforms_display')) {
        global $post;
        if (isset($post->post_content) && has_shortcode($post->post_content, 'wpforms')) {
            header('X-Frame-Options: SAMEORIGIN');
            header('X-Content-Type-Options: nosniff');
            header("Content-Security-Policy: default-src 'self'; script-src 'self' https://ajax.googleapis.com; style-src 'self' 'unsafe-inline'; img-src 'self' data:;");
            header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
        }
    }
}
add_action('send_headers', 'wpforms_add_security_headers_conditional');

Проверка результата после внедрения

После добавления кода:

  • Очистите кеш браузера и сайта (если используется кеширование).
  • Откройте любую страницу с формой WPForms.
  • В инструментах разработчика браузера перейдите во вкладку Network, выберите запрос к странице и посмотрите Response Headers.
  • Должны присутствовать заголовки:
    • X-Frame-Options: SAMEORIGIN
    • X-Content-Type-Options: nosniff
    • Content-Security-Policy с настройками по умолчанию
    • Strict-Transport-Security

Для полной проверки можно использовать https://securityheaders.com и ввести URL своего сайта.

Частые ошибки и как исправить

  • Заголовки не отображаются: Возможно, код добавлен в неправильное место, либо сервер/плагины блокируют добавление заголовков. Проверьте, что add_action('send_headers', ...) подключён корректно и не вызывается раньше отправки заголовков.
  • Конфликт с кешированием: Кеширующие плагины или CDN могут отдавать старые заголовки. Очистите кеш и проверьте снова.
  • Контент-Безопасная политика слишком строгая: Если у вас есть внешние скрипты, стили или картинки, их нужно добавить в CSP. Иначе браузер заблокирует загрузку ресурсов.
  • HSTS на HTTP-сайте: Заголовок Strict-Transport-Security применим только при HTTPS; на HTTP сайте его лучше не добавлять.

Практические советы по безопасности и производительности

  • Используйте заголовки безопасности для защиты от самых частых атак.
  • Тестируйте Content-Security-Policy, начиная с мягких настроек, постепенно усиливая.
  • Для сложных CSP рассмотрите специализированные плагины безопасности, например, HTTP Headers.
  • Добавляйте заголовки только к нужным страницам, чтобы снизить вероятность конфликтов.
  • Не забывайте про SSL — заголовок HSTS работает только с HTTPS.
WPForms и многошаговые формы: создание и настройка многостраничной формы в WordPress
12.02.2026
WPForms: как создать многостраничную форму в WordPress
09.01.2026
Как добавить поля калькулятора в WPForms с применением кода
13.04.2026
Как создать форму опроса с условиями в WordPress с WPForms
06.03.2026
WPForms: динамические поля выбора из списка и автоподстановка значений
13.01.2026