Javascript 可能会阻止我们的网站在另一个域内运行';s帧集还是IFrame?

Javascript 可能会阻止我们的网站在另一个域内运行';s帧集还是IFrame?,javascript,dns,frame,frameset-iframe,Javascript,Dns,Frame,Frameset Iframe,我们最近遇到了一个问题,其他网站在一个框架集中运行我们的电子商务网站,而我们的网站(加上违规者的附属id)是单个全宽框架中的唯一内容。因此,从本质上看,它看起来和感觉上都像是我们的网站,其URL位于顶部。我们可以切断他们的会员身份,这对他们来说是毫无意义的,但这并不能阻止未来的罪犯做同样的事情,直到我们发现它 有没有一种通用的方法(可能通过出现在每个页面上的JavaScript)来防止这种情况发生?请注意,将目标添加到所有链接是不可行的,但将JS片段添加到所有页面是可行的,因为页眉和页脚部分是从

我们最近遇到了一个问题,其他网站在一个框架集中运行我们的电子商务网站,而我们的网站(加上违规者的附属id)是单个全宽框架中的唯一内容。因此,从本质上看,它看起来和感觉上都像是我们的网站,其URL位于顶部。我们可以切断他们的会员身份,这对他们来说是毫无意义的,但这并不能阻止未来的罪犯做同样的事情,直到我们发现它

有没有一种通用的方法(可能通过出现在每个页面上的JavaScript)来防止这种情况发生?请注意,将目标添加到所有链接是不可行的,但将JS片段添加到所有页面是可行的,因为页眉和页脚部分是从单个源在站点范围内共享的

另一种可能是在Apache级别(如果我们可以在服务器端做任何事情的话),因为我们通过mod rewrite传递所有请求


请注意,如果父页面来自我们的域,则允许页面加载到IFrame中是非常重要的,因为我们可以有效地使用IFrame,这里只是猜测一下……但是如果使用javascript调用父窗口来访问其文档对象呢?你可以检查它是否不为空,如果有一个父窗口(意味着你的站点加载了一个框架),你可以通过javascript隐藏你所有的html…

看看这篇文章。它提供了一个相当简单的解决方案,用于检测帧并打破它们


此外,我会更进一步。无论何时检测到一个框架,都要获取有问题的站点框架构建者的附属ID,并使用AJAX将其与他们使用的URL一起推送到服务器。然后,无论是自动还是手动,您都可以验证他们是否正在构建您的站点,并一次取消一个附属代码。

我听说这个问题的解决方案被称为“框架弹出脚本”。谷歌很快就推出了一款。看起来这是最简单的方法之一:

if (window != top) top.location.href = location.href; 

我认为,实现这一目标的正确现代方法是使用

从MDN:

X-Frame-Options HTTP响应头可用于指示是否允许浏览器在Frame或iframe中呈现页面。网站可以通过确保其内容不嵌入其他网站,从而避免点击劫持攻击


看一看:

这将是相当漂亮的,黑客网站试图“Iframe”你的网站,将被重定向到你的网站在父窗口:)你也可以写这作为
if(top!==self)top.location.href=self.location.href
-同样的事情,但更多的对称性这些“frame popper脚本”有很多解决方法,因此,它们不应再被使用。见OWASP这是2017年的正确答案。OWASP提供了一个很好的解决方案,讨论了攻击和修复的可能性。根据现代最佳实践,我已经更新了我的老问题的选择答案