我在各种网站上都有iframe。在我的js中,我正在攻击不同域中的php文件。有没有办法获取托管我的iframe的服务器的域名。 (这是为了防止其他人攻击我的php文件)。
实施例。
我有一个名为www.domain.com
的域名和另一个名为www.phpscript.com
的域名
如果我的网站嵌入yahoo
。有什么方法可以让我发现我的js来自www.domain.com
而不是一些狡猾的网站?
$_SERVER['REMOTE_HOST']
和$_SERVER['REMOTE_ADDR']
在这种情况下不起作用,因为REMOTE_ADDR
会为用户提供IP,REMOTE_HOST
会返回yahoo
。
答案 0 :(得分:2)
如果您希望允许跨框架进行互动,但只允许在域的子集内进行互动,那么您需要Content Security Protection个扩展。目前这只在Firefox和Chrome中实现(不是MISE,不了解Safari和Opera等),但它是一个w3c标准,所以希望大家最终加入。
因此,在Example.com上运行的php脚本允许从other.com访问(反之亦然)....
$ok="'self',*.other.com,*.example.com";
$policy="default-src $ok; frame-ancestors: $ok";
header("X-Content-Security-Policy: $policy");
header("X-Webkit-CSP: $policy");
header("Content-Security-Policy: $policy");
注意,启用CSP时还有其他含义。
答案 1 :(得分:0)
修改强>
OP希望与我最初解释问题的方式相反。
要阻止在iframe 不 时访问该网站,您可以使用:
<script type="text/javascript">
if (window.top === window.self) {
window.self.location = 'about:blank';
window.self.onload=function(evt){
window.self.location = 'about:blank';
document.body.innerHTML='';
};
document.body.innerHTML='';
}
</script>
这需要启用JavaScript,如果在iframe之外访问该页面,则会将页面空白并重定向到about:blank(无)。
阻止在iframe IS 时访问该网页(原始答案,仍然有用)。
您可以发送标题X-Frame-Options: SAMEORIGIN
(what Google does),要求浏览器不要在您网域中不显示的内容中显示内容。
<强> PHP 强>
header('X-XSS-Protection: 1; mode=block');
header('X-Frame-Options: SAMEORIGIN');
您还可以使用JavaScript解决此问题,以停止通过iframe访问该网站:
if (window.top !== window.self) {
window.self.location = 'about:blank';
window.self.onload=function(evt){
window.self.location = 'about:blank';
document.body.innerHTML='';
};
document.body.innerHTML='';
}
这两种方法都依赖于浏览器支持,但它总比没有好。