禁用其他网站的iframe嵌入

9
我希望禁止其他网站嵌入我的网站的iframe,并编写了以下js代码: <script type="text/javascript"> if(document.referrer.indexOf("mydomain.com") != -1) { window.location = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0"; } </script> 这段代码可以正常工作,但我有page01.php和page02.php两个页面。 我想在page01.php的源代码中插入一个用于显示page02.php的iframe。
<iframe src="page02.php"></iframe> 

当我执行此操作时,会重定向到:
http://www.youtube.com/watch_popup?v=oHg5SJYRHA0

如何解决这个问题? 谢谢


更改 window.location = "<destination_url>" 中的目标字符串?无论如何,我都会在服务器端编写代码。 - Flash Thunder
4个回答

15

我建议您使用X-Frame-Options头部。如果您正在使用nginx,您可以在服务器或位置块中添加以下行:

add_header X-Frame-Options "SAMEORIGIN";

当您添加此标头时,现代浏览器会拒绝加载您的页面到框架中。请注意,这在旧版浏览器中无法正常工作。


也许这是个好主意,但是在哪里添加这段代码呢? 是在我的page02.php文件中还是网站的index.php文件中?或者是在htaccess文件中?你能给我一些例子吗?谢谢。 - Aleksandar
1
这段代码片段需要添加到nginx服务器配置文件中。看起来你正在使用Apache。尝试将Header add X-Frame-Options "SAMEORIGIN"添加到你的.htaccess文件中。 - Mehmet Baker
实际上 <IfModule mod_headers.c> - Mehmet Baker
以下是如何在Netlify上完成此操作的方法。https://docs.netlify.com/routing/headers/#syntax-for-the-netlify-configuration-file - Trey Piepmeier

3

你说“确保”,但并非所有浏览器都支持,因此这不是一个“确保”的解决方案。 - user2342558
@user2342558 - 我在帖子中添加了一些澄清,说明这不是一个“确定”的解决方案,只是应该采取的更好的保证措施,而不是使用“SAMEORIGIN”(这是当前得票最高的选项)。 - Adam Wise

2

如果您不喜欢将保护留给浏览器,仍然可以使用JS。

//Check if the page is loaded in an iframe
if(window.self != window.top) {
  //Almost all browsers will deny Cross-Origin script access, so
  //we will use a try-catch block
  try {
    if(window.parent.location.hostname.indexOf("mydomain.com") == -1) {
      window.location.href = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0";
    } else {
      //You are in an iframe but Same-Origin
    }
  } catch (ex) {
    //Congrats, you are in an iframe loaded in a stranger's site!
    window.location.href = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0";
  }
}

谢谢您的回答,但是使用这段代码后,我仍然遇到了同样的问题,没有任何改变。 - Aleksandar

1
对于 PHP 网站,您可以在脚本的开头编写此行代码,在任何输出之前:
header( 'X-Frame-Options: DENY' );

更多关于头文件函数这里的信息。

现在我无法更新这个答案:你可以谈论在PHP脚本的开头删除这一行,而不是特别针对WordPress进行讨论。 - Valerio Bozz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接