我正在使用PHP创建一个小网页,该网页将作为来自几个网站的IFRAME进行访问。我想限制访问此网站只能在“已批准”的网站内工作,而不能在其他网站上工作或直接访问。有没有人有什么建议?这甚至可能吗? PHP站点将是Apache,而内容可能是.NET。
只是澄清一下,任何网站都可以查看该网页,只要它在已批准的网站中是iframe。我想阻止人们直接访问它。我认为cookie可能是一种解决方案,但我不确定。
答案 0 :(得分:1)
不幸的是,这是不可能的。
使用Javascript,您可以检查您的页面是否嵌入到另一个框架中,但这不是万无一失的,因为在某些人的浏览器中可以关闭Javascript。
例如,如果是出于意图,您可以运行以下javascript来重新显示您的页面:
if (top.location != location) {
top.location.href = document.location.href ;
}
答案 1 :(得分:1)
考虑到这一点......我不相信这是完全安全的,但是当我考虑更多时,这是一个镜头 -
你能做到这一点的唯一方法是,如果你控制它所嵌入的网站。如果你控制它们,你可以将加密的时间从框架集传递到框架:
<iframe src="http://yourdomain/frame.php?key=p21n9u234p8yfb8yfy234m3lunflb8hv" />
frame.php然后解密消息以找到小三角形内的时间(比如说10秒)。因为frame.php知道只有可接受的站点可以加密时间,所以它知道可以显示自己。否则,它什么都不输出。
其他任何内容,无论是javascript还是HTTP_REFER,都可以被欺骗,关闭或绕过。
事实上,只要用户在10秒内加载它,攻击者就可以在任何地方显示你的框架。因此,攻击者只需抓住接受的网站,然后抓住密钥。如果你认为这种威胁模型是不可接受的 - 那么你真的没有什么可以做的(除了可能是一个更复杂的协议)。
答案 2 :(得分:1)
我会像谷歌实施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(在浏览器的安全限制范围内)检查文档的属性,以防止未经授权的访问。
答案 3 :(得分:1)
屏幕抓取可能是一种可能的解决方案。
在您的网站上设置访问列表,仅接受来自已批准网站Web服务器的请求,并向其发出安全令牌。这是容易的部分。
开发团队需要设置一个中继servlet来获取你的内容,然后将其显示给用户(在重写任何相关网址后)。
这可能非常复杂,但您可以更好地控制谁访问该网站。此外,您发出的任何安全令牌都不会对Web用户可见,因为它只应在两个Web服务器之间传输。
答案 4 :(得分:1)
您可以使用密码盐+日期MD5(或加密以获得更好的安全性)客户端IP,并将其作为iframe src url中的参数传递。在iframe中,您执行相同的操作并检查结果是否与参数相同;如果没有,拒绝访问
答案 5 :(得分:0)
你能否检查$_SERVER['HTTP_REFERER']
以确保它包含某个字符串?
if (strpos('http://example.com', $_SERVER['HTTP_REFERER']) !== false) {
// allowed
}
在您的情况下,您可能需要先解析地址,然后检查是否in_array()
。
这不是万无一失的,因为人们可以伪造推荐人,但是也许你可以在2台服务器之间进行某种其他通信的某种使用密钥。如果密钥已被使用,则不要去。
答案 6 :(得分:-2)
感谢所有好主意!我认为我将要使用的解决方案是由批准的“iframing”网站设置的会话cookie。确实有人确定仍然可以获得内容,但我认为我可以通过基于双方的某种共享秘密提出一个体面的“秘密”算法来防止大多数滥用,并且批准的网站设置为会话cookie将由我的PHP站点读取。如果cookie有效且符合我的标准,我将显示内容,否则我不会。我正在保护的信息不是关键任务,我只是想阻止它被滥用。