Защитите свой сайт от атак типа click-jacking, внедрив заголовок CSP (Content Security Policy). CSP – один из 10 лучших безопасных заголовков по версии OWASP, и эксперты по безопасности часто рекомендуют применять его. Существует множество вариантов построения политики, чтобы обеспечить соблюдение того, как вы хотите раскрывать свои веб-ресурсы. Одна из директив под названием frame-ancestors
, появившаяся в CSP версии 2, обеспечивает большую гибкость по сравнению с заголовком X-Frame-Options. frame-ancestors
работает так же, как и X-Frame-Options, разрешая или запрещая встраивание ресурсов с помощью элементов iframe, frame, object, embed и applet. Я думаю, что X-Frame-Options будет устаревшим в ближайшем будущем, когда CSP будет полностью совместим со всеми основными браузерами. Пока я пишу, CSP frame-ancestors работает со всеми последними версиями браузеров, кроме IE.

Я не знаю, когда Microsoft разрешит поддержку IE. Вы всегда можете проверить совместимость браузеров на сайте Can I Use. Давайте рассмотрим следующую процедуру реализации.
Apache HTTP
mod_headers
– это необходимое условие для внедрения любых заголовков в Apache. В зависимости от ОС и версии, но если вы используете Ubuntu и Apache 2.4, то вы можете использовать a2enmod headers
, чтобы включить его.
root@geekflare:/etc/apache2# a2enmod headers
Enabling module headers.
To activate the new configuration, you need to run:
systemctl restart apache2
root@geekflare:/etc/apache2# systemctl restart apache2
root@geekflare:/etc/apache2#
Примечание: все настройки вы можете выполнить в файле httpd.conf
или любом другом эффективном файле конфигурации, который вы используете.
ОТКАЗАТЬ ВСЕМ
Аналогично X-Frame-Options DENY. Если вы не хотите, чтобы какой-либо сайт (в том числе и собственный) встраивался, добавьте следующее.
Header set Content-Security-Policy "frame-ancestors 'none';"
Сохраните файл и перезапустите Apache HTTP, чтобы он вступил в силу.

Я попытался вставить сайт, и, как вы видите, он был заблокирован.
Разрешайте себе, но запрещайте другим
Аналогично X-Frame-Options SAMEORIGIN, вы можете добавить следующее.
Header set Content-Security-Policy "frame-ancestors 'self';"
Разрешите использовать себя и несколько доменов
В X-Frame-Options не было возможности разрешить использование нескольких доменов. Благодаря CSP вы можете сделать так, как показано ниже.
Header set Content-Security-Policy "frame-ancestors 'self' 'geekflare.com' 'gf.dev' 'geekflare.dev';"
Вышеуказанное позволит встраивать содержимое с доменов self, geekflare.com, gf.dev, geekflare.dev. Замените эти домены на свои.
Nginx
Концепция и директива такие же, как и в разделе Apache HTTP, за исключением способа добавления заголовка. Заголовки в Nginx должны быть добавлены в блок сервера
в соответствующем конфигурационном файле.
отказать во всех
add_header Content-Security-Policy "frame-ancestors 'none';";
Отрицать все, но не себя
add_header Content-Security-Policy "frame-ancestors 'self';";
Разрешить использование нескольких доменов
add_header Content-Security-Policy "frame-ancestors 'yoursite.com' 'example.com';";
Приведенный выше пример позволит встраивать контент на сайтах yoursite.com и example.come. После внесения изменений не забудьте перезапустить сервер Nginx для проверки политики.
WordPress
Это зависит от того, как вы размещаете WordPress. Если вы размещаетесь самостоятельно, например в облаке или на VPS, то, возможно, вы используете веб-сервер, например Apache или Nginx. Если это так, то вы можете следовать вышеупомянутому, чтобы внедрить в веб-сервер вместо WordPress. Однако если вы находитесь на виртуальном хостинге или не имеете доступа к модификации веб-серверов, то вы можете воспользоваться плагином. Чтобы реализовать CSP в WordPress, вы можете использовать плагин Content Security Policy Pro.
Верификация
После того как вы закончите с реализацией, вы можете воспользоваться встроенными в браузер средствами разработчика или инструментом проверки защищенных заголовков.
Заключение
CSP – это один из мощных и безопасных заголовков для предотвращения веб-уязвимостей. Надеюсь, приведенные выше инструкции подскажут вам, как реализовать фрейм-анкесторы в Apache и Nginx.