我正在使用PHP创建一个小型网页,它将作为来自几个站点的IFRAME进行访问。我想限制访问本网站只在“已批准”网站内工作,而不是其他网站或直接访问。有没有人有什么建议?这甚至有可能吗? PHP站点将是Apache,并且iframing内容的站点可能是.NET。在PHP中限制IFRAME访问
只是为了澄清,任何网站都可以查看该网页,只要它在经过批准的网站内是iframe。我想阻止人们直接访问它。我认为饼干可能是一种解决方案,但我不确定。
我正在使用PHP创建一个小型网页,它将作为来自几个站点的IFRAME进行访问。我想限制访问本网站只在“已批准”网站内工作,而不是其他网站或直接访问。有没有人有什么建议?这甚至有可能吗? PHP站点将是Apache,并且iframing内容的站点可能是.NET。在PHP中限制IFRAME访问
只是为了澄清,任何网站都可以查看该网页,只要它在经过批准的网站内是iframe。我想阻止人们直接访问它。我认为饼干可能是一种解决方案,但我不确定。
感谢所有伟大的想法!我认为我将要使用的解决方案是由批准的“iframing”网站设置的会话cookie。有人确定仍然能够获得内容,但我认为我可以通过提出一种体面的“秘密”算法来防止大多数滥用,这种算法基于双方的某种共享秘密,并且已批准的站点设置为会话cookie将被我的PHP站点读取。如果cookie有效且符合我的标准,我将显示内容,否则我不会。我所保护的信息不是关键任务,我只是想阻止它被滥用。
不幸的是,这是不可能的。
使用Javascript,你可以检查你的页面是否嵌入到另一个框架中,但这不会是万无一失的,因为Javascript可以在某些人的浏览器中关闭。
例如,您可以运行下面的JavaScript重定位你的页面,如果是这样的意向:
if (top.location != location) {
top.location.href = document.location.href ;
}
你能不检查$_SERVER['HTTP_REFERER']
,以确保它包含某些字符串?
if (strpos('http://example.com', $_SERVER['HTTP_REFERER']) !== false) {
// allowed
}
你的情况,你可能想先解析出地址,然后检查是否in_array()
。
这不会是愚蠢的证据,因为人们可以伪造引荐者,但是也许你可以做2种服务器之间的某种其他通信的某种使用密钥。如果钥匙已被使用,则不行。
想到这里......我不相信这是完全安全的,但这里有一个镜头,而我觉得它更多 -
你可以做到这一点的唯一方法,就是如果你控制它的网站将嵌入如果你控制他们,你可以打发时间,加密,从框架到框架:
<iframe src="http://yourdomain/frame.php?key=p21n9u234p8yfb8yfy234m3lunflb8hv" />
frame.php然后解密消息内的小找出时间三角洲(比如10秒)。由于frame.php知道只有可接受的网站可以加密时间,因此它知道可以自行显示。否则,它不输出任何内容。
不管是javascript还是HTTP_REFER,都可以被欺骗,关闭或规避。
事实上,只要用户在10秒内加载它,攻击者就可以在任何地方显示帧。所以攻击者只会刮掉接受的网站,并抓住钥匙。如果这种威胁模型对你来说是不可接受的 - 那么你确实无能为力(除非是更复杂的协议)。
我会以与谷歌实施AdSense相同的方式实现。而不是让他们嵌入自己的网站,iframe代码,而不是让他们嵌入一些JavaScript其中包括账户号码:
<script type="text/javascript"><!--
myiframe_client = "12345";
myiframe_width = 728;
myiframe_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://www.example.com/scripts/show_iframe.js">
</script>
至少这样你可以管理谁在每个帐户基础上显示您的iframe内容。如果有人未经授权尝试使用您的iframe,则可以禁用该帐户。您还可以通过javascript(在浏览器的安全限制范围内)检查文档的属性,以防止未经授权的访问。
屏幕抓取可能是一个可能的解决方案。
在您的网站上设置访问列表,只接受来自已批准站点Web服务器的请求,并向他们发放安全令牌。这是很容易的部分。
开发团队在他们的最后需要设置一个中继servlet来获取您的内容,然后将其显示给用户(在重写任何相关的url之后)。
这可能会涉及很多,但您可以更好地控制访问网站的人员。此外,您发布的任何安全令牌都不会对Web用户可见,因为它只应在两个Web服务器之间传输。
您可以使用秘密salt +日期将MD5(或加密以提高安全性)客户端IP,并将其作为iframe src url中的参数传递。在iframe中,你做同样的事情,并检查结果是否与参数相同;如果没有,拒绝访问
我希望有某种类似HTTP_REFERER变量的功能,但我认为没有。 :-( – m0j0 2008-10-28 21:35:52
HTTP_REFERER不能被信任 - 它可以随意更改或隐藏 – 2008-10-28 21:44:42
您也可以使用JavaScript来加载最终页面,以便它们需要启用JS才能使用它,因此您可以使用JS防止它被加载到未经授权的页面 – staticsan 2008-10-29 01:13:25