我想在iframe中加载外部网站,如果其中任何一个网站使用了框架拦截器,那么我想将用户重定向到错误页面。已经有一些提议的方法:
到目前为止,令人沮丧的是,我在最后一项中运气最好。其他方法无法正常工作,原因如下:
"Refused to display <URL> in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'
/ 'DENY'"
等错误无关。也许我误解了其中一种方法。这里有解决方案吗?我失踪了吗?对于上下文,我主要在JS + jQuery中执行此操作。
答案 0 :(得分:0)
我有一个临时修复,使用标题信息作为@charlietfl建议,虽然它并不完美,你可以在测试部分看到,并非所有网站都在其标题中列出x-frame选项。
<?php
// checkXFO
// checks x-frame options
// $headers: an array of headers
// returns: nothing
function checkXFO($headers){
if($headers['X-Frame-Options']==""){
echo "good to embed! <p>";
}
else{
echo "Denied! <p>";
}
}
//-----------------------
// tests
//-----------------------
// x-frame option: SAMEORIGIN
// should deny
// > passes
$headerArray = get_headers('http://www.google.com',1);
checkXFO($headerArray);
// x-frame option: DENY
// should deny
// > passes
$headerArray = get_headers('http://www.facebook.com',1);
checkXFO($headerArray);
//x-frame option: none
// should accept
// > passes
$headerArray = get_headers('http://wikipedia.org',1);
checkXFO($headerArray);
//x-frame option: none
// should accept
// > passes
$headerArray = get_headers('http://neopets.com',1);
checkXFO($headerArray);
//x-frame options: DENY
// should deny
// > fails
$headerArray = get_headers('http://www.yahoo.com',1);
checkXFO($headerArray);
//x-frame option:none. Redirected x-frame options: DENY
// should deny
// > fails
$headerArray = get_headers('http://www.yahoo.ca',1);
checkXFO($headerArray);
?>