.htaccess 如何阻止Iframe调用

.htaccess 如何阻止Iframe调用,.htaccess,iframe,.htaccess,Iframe,最近,我的完整站点在iframe中被另外两个域调用。我想阻止其他网站,他们正试图在iframe中显示我的网站 我怎样才能通过.htaccess阻止它呢?嗯,我想你不能 iframe是客户端容器,这意味着最终用户浏览器负责在iframe中加载内容。您无法区分页面是否加载在iframe中。我认为您无法通过.htaccess,但是您可以使用JS。您可以使用类似这样的函数来检查: function parentIsSameOrigin() { var result = true; if

最近,我的完整站点在iframe中被另外两个域调用。我想阻止其他网站,他们正试图在iframe中显示我的网站


我怎样才能通过.htaccess阻止它呢?

嗯,我想你不能


iframe是客户端容器,这意味着最终用户浏览器负责在iframe中加载内容。您无法区分页面是否加载在iframe中。

我认为您无法通过.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中设置变量

所有现代浏览器都支持X-Frame-Options标题

Facebook使用此标题来禁用iframe/frameset(也是Javascript)

如果已在apache中启用mod_头:

.htaccess

Header set X-Frame-Options DENY
但是,您可以启用来自同一来源的iFrame

Header always append X-Frame-Options SAMEORIGIN
或在Nginx中:

add_header X-Frame-Options Deny; #or SAMEORIGIN
浏览器兼容性:

  • Internet Explorer:8.0
  • Firefox(Gecko):3.6.9(1.9.2.9)
  • 歌剧:10.50
  • 狩猎:4.0
  • 铬:4.1.249.1042

您可以按如下方式使用.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重定向任何请求到未找到页面

这个解决方案促成了这个答案

你不能按话“强制”它,因为有很多方法,但是你可以使用标准的header方法。有一个很好的vhost/htaccess代码段,它首先将
X-Frame-Options
设置为您选择的
DENY/SAMEORIGIN/ALLOW-FROM
,然后允许白名单MIME类型在良好的帧中使用,例如谷歌图像搜索

查看最新链接,但以下是2016年1月25日在
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>

标题集X帧选项“SAMEORIGIN”
标题未设置X帧选项

这不是真的。您可以通过JavaScript检查网页是否为
top
window.top===window
.Mmm…但是如果客户端浏览器上禁用了JavaScript呢?没有其他方法,如果这是一个合理的问题,我将使用JS加载Iframe的内容,以确保除非函数验证,否则不会显示任何内容。您始终可以使用css放置display:none,并使用JavaScript删除它。如果用户禁用了javascript(这对于现代标准来说是不可接受的),它会强制用户不显示内容。我认为,这是最好的方式。另一个合适的方法是使用php:header(“X-Frame-Options:SAMEORIGIN”)。。。js或referer是无点的snote:Header指令位于mod_headers apache模块中。您需要确保该模块已加载到apache服务器中。