【问题标题】:Detect X-Frame-Options检测 X-Frame-Options
【发布时间】:2014-02-11 08:37:20
【问题描述】:

有没有办法检测是否允许在 iframe 中加载页面?

如果 URL 无法在 iframe 中加载,我想让用户知道他们提交的 URL 在我们的网站上不起作用。

我已尝试获取内容,但不起作用:

$("iframe#data-url").on("load", function() {
    alert($(this).contents())
});

我不确定从这里去哪里。

拒绝在框架中显示“https://www.facebook.com/”,因为它将“X-Frame-Options”设置为“DENY”。

有没有办法检测X-Frame-Options

【问题讨论】:

  • 不确定投票者对什么感到不安,这对我来说似乎是一个完全有效的问题

标签: javascript iframe


【解决方案1】:

由于您的脚本和目标 URL 位于不同的域中,JavaScript 的跨域策略不允许您访问标头。几个月前我遇到了同样的问题,最终使用 JavaScript 将 AJAX 请求发送到 PHP 文件,然后该文件可以解析标头。

这是我在 PHP 文件中的内容。然后,这将在 JSON 数组中返回结果。如果有帮助,请告诉我!

$error=false;
$urlhere='http://facebook.com';
$ch = curl_init();

$options = array(
        CURLOPT_URL            => $urlhere,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HEADER         => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_ENCODING       => "",
        CURLOPT_AUTOREFERER    => true,
        CURLOPT_CONNECTTIMEOUT => 120,
        CURLOPT_TIMEOUT        => 120,
        CURLOPT_MAXREDIRS      => 10,
);
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch);
$headers=substr($response, 0, $httpCode['header_size']);
if(strpos($headers, 'X-Frame-Options: deny')>-1||strpos($headers, 'X-Frame-Options: SAMEORIGIN')>-1) {
        $error=true;
}
$httpcode= curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo json_encode(array('httpcode'=>$httpcode, 'error'=>$error));

我知道这不是一个理想的回应,但这是我在项目中所能得到的全部。


编辑:正如下面的Bill 所述,如果您将strpos() 更改为stripos(),您可能会得到更好的结果,因为它会运行不区分大小写的搜索。

【讨论】:

  • 这是一个不错的解决方案。 JavaScript 可能无法读取标头,但 PHP 肯定可以 :-)
  • 谢谢!我还将它用于框架断路器,例如if(self!=top)....
  • 好主意,我想我明天会把它添加到我自己的代码中!
  • 不错。我将 strpos 更改为 stripos 以获得更好的结果
  • 只有一个字真棒:)
猜你喜欢
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 2011-12-18
  • 2017-12-07
  • 2016-09-17
  • 2017-06-13
  • 2013-06-10
相关资源
最近更新 更多