Недавно мой полный сайт вызывается в iframe двумя другими доменами. Я хотел бы заблокировать другие сайты, которые пытаются показать мой сайт в iframe.
Как я могу заблокировать это через .htaccess?
Недавно мой полный сайт вызывается в iframe двумя другими доменами. Я хотел бы заблокировать другие сайты, которые пытаются показать мой сайт в iframe.
Как я могу заблокировать это через .htaccess?
Вы можете установить переменную в заголовок X-Frame-Options: Deny.
Все современные браузеры поддерживают заголовок X-Frame-Options.
Facebook использует этот заголовок для отключения iframe/framesets (также Javascript).
Если вы включили mod_headers в apache:
.htaccess
Header set X-Frame-Options DENY
Но вы можете включить iframe из одного источника.
Header always append X-Frame-Options SAMEORIGIN
Или в Nginx:
add_header X-Frame-Options Deny; #or SAMEORIGIN
Совместимость с браузером: Источник
Я не думаю, что вы можете через .htaccess, вы можете использовать JS. Вы можете использовать такую функцию, чтобы проверить:
function parentIsSameOrigin()
{
var result = true;
if (window.parent)
{
result = Boolean
(
// more precise modifications needed here
window.this.location.href.indexOf(window.parent.location.href) == 0
);
}
return result;
}
Вы не можете "принудительно применять" его, поскольку есть способы обойти, но вы можете использовать стандартный метод заголовка. html5-boilerplate имеет хороший фрагмент vhost/htaccess, который сначала устанавливает X-Frame-Options
как ваш выбор DENY/SAMEORIGIN/ALLOW-FROM
, а затем разрешает типы MIME для белых списков для использовать в хороших кадрах, таких как поиск изображений Google.
Проверьте ссылку на последнюю, но вот пример с 25 января 2016 года в режиме SAMEORIGIN
:
<IfModule mod_headers.c>
Header set X-Frame-Options "SAMEORIGIN"
<FilesMatch "\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$">
Header unset X-Frame-Options
</FilesMatch>
</IfModule>
вы можете использовать .htaccess следующим образом
RewriteEngine On
RewriteCond %{QUERY_STRING} !^id=[^&]+ [NC]
# if referrer is bad.com
RewriteCond %{HTTP_REFERER} (www\.)?bad\.com [NC]
# then redirect to a different page
RewriteRule !^404.shtm [L,NC,R=302]
Вам нужно будет полагаться на HTTP_REFERER, чтобы этот код перенаправлял любые запросы с bad.com на не найденную страницу
это решение способствовало этому ответу
Умм, я не думаю, что ты можешь.
IFrame является контейнером на стороне клиента, что означает, что браузер конечных пользователей несет ответственность за загрузку содержимого внутри iframe. Вы не сможете отличить, была ли загружена ваша страница в iframe или нет.