最近两个其他域名通过iframe嵌入我的整个网站。我想要阻止那些试图通过iframe展示我的网站的其他网站。如何通过.htaccess实现阻止呢?
你可以在头部设置变量 X-Frame-Options: Deny。
所有现代浏览器都支持 X-Frame-Options 标头。
Facebook 使用此标头禁用 iframe/frameset(还有 JavaScript)。
如果你已经在 Apache 中启用了 mod_headers:
.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;
}
X-Frame-Options
设置为您选择的DENY / SAMEORIGIN / ALLOW-FROM
,然后允许白名单MIME类型用于良好的框架,例如Google图像搜索。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>
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 中加载。
window.top === window
。 - Derek 朕會功夫