Вопрос или проблема
Большое количество клиентских сайтов размещено на платформе хостинга NGINX, и многие из этих сайтов используют специализированное программное обеспечение для электронной коммерции… …поставщик eComm настоятельно рекомендует всем своим клиентам обеспечить надежную безопасность, и единственное требование, с которым мы не соответствуем, это чтобы X-Frame-Options
было установлено на SAMEORIGIN
или DENY
.
Обычно мы бы сделали это с помощью .htaccess
, но на этом хосте .htaccess
нет. Поэтому мы создали простой плагин, который ничего не делает, кроме как устанавливает HTTP-заголовок X-Frame-Options: SAMEORIGIN
.
if( !function_exists( 'wpse60844_set_xframe' ) ) :
function wpse60844_set_xframe() {
header( 'X-Frame-Options: SAMEORIGIN' );
}
add_action( 'send_headers', 'wpse60844_set_xframe', 99 );
endif;
С помощью вышеописанного мы можем проверить, есть ли этот заголовок в отправленных заголовках, и он есть…
var_dump( headers_list() )
показывает мне, что X-Frame-Options
установлен на SAMEORIGIN
.
Однако любой сканер сайта, который мы запускаем, и инструменты разработчика в каждом браузере не показывают, что он установлен.
Мы также пытались сначала remove_headers()
, а затем снова установить его, и пробовали запускать функцию на init
, а не на send_headers
. Ничто из этого, похоже, не имеет значения.
Ответ или решение
Чтобы установить заголовок X-Frame-Options
с помощью действия send_headers
в WordPress, необходимо учитывать несколько моментов, которые могут влиять на его корректное отображение. Давайте рассмотрим шаги для решения вашей проблемы.
1. Проверьте порядок загрузки плагина
Убедитесь, что ваш плагин загружается до того, как отправляются заголовки. Если ваш код не выполняется до того, как заголовки отправлены, то заголовок может не добавляться. Использование приоритета в add_action
(например, 99
) может помочь, однако порядок загрузки всех плагинов также вызывает влияние. Попробуйте использовать немного более ранний приоритет, например:
add_action( 'send_headers', 'wpse60844_set_xframe', 10 );
2. Используйте правильную функцию для проверки заголовков
Хорошая практика для проверки установленных заголовков — это делать это в самом конце загрузки скрипта. Используйте wp_footer
или wp_head
, чтобы убедиться, что все заголовки уже отправлены:
add_action( 'wp_footer', 'wpse60844_check_headers' );
function wpse60844_check_headers() {
echo '<script>console.log(headers_list());</script>'; // Отладка в консоли браузера
}
Однако однозначно проверьте так же и в DevTools вкладку "Network", где можете увидеть отправленные заголовки.
3. Проверьте, нет ли конфликтов
Постарайтесь временно отключить другие плагины, которые могут изменять заголовки, и проверьте, продолжаете ли вы получать такие же проблемы. Иногда плагины безопасности могут переопределять заголовки или добавлять свои собственные.
4. NGINX-конфигурация
Это очень важный момент. Если ваш сервер работает на основе NGINX, то настройка заголовков может управляться непосредственно через конфигурацию самого сервера. Вам нужно убедиться, что заголовок X-Frame-Options
не переопределяется сервером. Проверьте конфигурацию вашего NGINX файла и добавьте следующий код внутри блока server:
add_header X-Frame-Options "SAMEORIGIN" always;
5. Кеширование
Если вы используете какие-либо системы кеширования (например, плагин кеширования на WordPress или сторонние решения, такие как Varnish или Redis), не забудьте очистить кеш после внесения любых изменений и проверьте заголовки еще раз.
6. Обновление и Проверка
Наконец, всегда старайтесь держать вашу установку WordPress и все плагины в актуальном состоянии, так как новые версии могут содержать исправления или изменения, которые могут повлиять на вашу настройку.
Следуя этим шагам, вы должны решить проблему с заголовком X-Frame-Options
и обеспечить соответствие требованиям безопасности. Если проблема сохраняется, возможно, стоит обратиться к вашему хостинг-провайдеру для получения дополнительной поддержки по настройкам сервера.