检查网站是否在iframe内

Sim*_*sen 26 php iframe

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

我知道这可能与JavaScript,但我找不到任何PHP的例子?

Geo*_*ins 42

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


附加细节

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

  1. $ _ SERVER [ 'HTTP_REFERER']:

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

  1. 单独的网址

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

  1. 网址参数

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

?access_method=facebook
Run Code Online (Sandbox Code Playgroud)

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


Pat*_*sma 19

对于登陆这个旧线程的任何人:无论您的页面是否通过 iframe 加载,都有一种非常简单的方法来检查 PHP。

if( isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] == 'iframe' ) {}
Run Code Online (Sandbox Code Playgroud)

  • IE、Firefox 和 Safari 不支持此标头 - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-Fetch-Dest#browser_compatibility (4认同)
  • Geilt,我也找不到任何相关信息。因此,我只是开始通过代理或直接使用 yes/no Adguard(以及类似的方法)比较带有和不带有 iFrame 的所有 $_SERVER。很多 $_SERVER 变量都有其他值。唯一总是在 iFrame 中向我们展示的(无论连接如何)是 $_SERVER['HTTP_SEC_FETCH_DEST']。 (2认同)

i.a*_*iel 8

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


Wil*_*rds 5

<?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
?>
Run Code Online (Sandbox Code Playgroud)

请注意,这$_SERVER['HTTP_REFERER']是完全不可靠的:它可以被修改。另请注意,此方法是“https 敏感的”。如果从https://xwhile加载帧YourFrameURL设置为http://x,它将不起作用。使用以下方法修复此问题:

if(!$_SERVER['HTTP_REFERER'] == 'http://YourFrameURL' or !$_SERVER['HTTP_REFERER'] == 'https://YourFrameURL') {
Run Code Online (Sandbox Code Playgroud)