检查网站是否在iframe内

时间:2011-07-12 10:11:15

标签: php iframe

任何人都知道是否可以使用PHP检查网站是否在iframe内。

我知道这可以用javascript,但我找不到任何关于PHP的例子?

5 个答案:

答案 0 :(得分:40)

PHP从不在iframe中。 PHP在服务器端执行,并生成HTML,Javascript或文本等输出。 PHP生成的输出可能会生成或驻留在iframe中,但从不生成PHP本身。


其他详细信息

关于您在评论中添加的其他详细信息(您希望区分直接访问您网站的请求和通过Facebook应用程序发出的请求),您可以使用以下几种技术:

  1. $ _ SERVER [ 'HTTP_REFERER']:
  2. 您可以检查引荐来源以确定请求是来自Facebook网址,来自您自己网站上的其他网页,来自第三方网站,还是来自直接流量。此方法并非万无一失,但可能会提供比您当前收到的应用程序更多的信息。

    1. 单独的网址
    2. 您可以为您网站上运行的应用程序和Facebook版本创建单独的URL。使用$_SERVER['REQUEST_URI'],您可以轻松检测是否通过“yoursite.com/fbapp”或“yoursite.com/localapp”访问了您的应用程序。这两个URL都可以通过Apache的mod_rewrite或您选择的别名解决方案引用相同的脚本。

      1. 网址参数
      2. 这种方法可能最容易实现。如果您在向Facebook提供应用程序URL时可以提供URL参数,只需添加参数即可。例如:

        ?access_method=facebook
        

        在PHP中,您可以轻松检查access_method参数的存在和值,并根据需要采取措施。

答案 1 :(得分:7)

不,PHP是服务器端。它无法知道它是否在iframe中。

答案 2 :(得分:4)

对于任何使用此旧线程的人:有一种非常简单的方法可以检入PHP,无论是否通过iframe加载页面。

if( isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] == 'iframe' ) {}

答案 3 :(得分:3)

您可以查看$_SERVER['HTTP_REFERER']。这实际上不可信,因为浏览器并不总是提供此信息。同样HTTP_REFERER并不总是意味着iframe,但对于特殊情况,这很好。

答案 4 :(得分:1)

<?php
if(!$_SERVER['HTTP_REFERER'] == 'YourFrameURL') {
    // Site is NOT loaded from iframe
    die('Please load this page from YourFrameURL');
}
else {
    // Site IS loaded from iframe: display content
?>

请注意$_SERVER['HTTP_REFERER']完全不可靠:可以修改。另请注意,此方法为“https-sensitive”。如果在https://x设置为YourFrameURL时从http://x加载框架,则无效。通过使用:

解决此问题
if(!$_SERVER['HTTP_REFERER'] == 'http://YourFrameURL' or !$_SERVER['HTTP_REFERER'] == 'https://YourFrameURL') {