我有几个页面通过jQuery .ajax调用内容。我不希望页面上显示内容,这就是为什么我使用.ajax而不显示/隐藏内容的原因。我想保护AJAX目录中的文件不能通过浏览器URL直接访问。我知道PHP标头可能是欺骗性的,不知道是否更好地使用“访问”键或尝试通过htaccess进行。
我的问题是什么是更可靠的方法?没有登录/未登录的用户状态,主页需要能够从AJAX目录中的页面中提取内容。
thx
答案 0 :(得分:3)
制作临时的时间编码会话变量。在回显数据之前检查php输出文件中的变量。
或者,如果您不想使用会话..请执行以下操作:
$ key = base64encode(time()。'abcd');
读取文件中的: base64decode 由abcd爆炸 读时间。允许5秒缓冲。如果时间落在加盖请求的5秒内。你是合法的。
为了使其更安全,您可以更改加密/解密机制。
答案 1 :(得分:3)
我会放弃这个想法,因为没有安全的方法可以做到这一点。
您的服务器永远无法区分“伪造”的“真实”Ajax请求,因为请求的每个方面都可以在客户端伪造。攻击者只需查看数据包过滤器即可查看您的网页发出的请求。复制请求是微不足道的。
您解决的任何解决方案都不会做任何事情,只会提供虚假的安全感。如果您有需要保密的数据,则需要采用一些更有效的保护措施,如身份验证。
答案 2 :(得分:1)
为什么不将内容放在webserver目录之外,然后有一个php脚本可以验证该人是否应该看到它,然后将其发送给它们。
所以,你有getcontent.php
,你可以查看一个cookie,或者给javascript页面提供的令牌,它用来做请求,然后它只会获取真实内容,设置mime键入并将其流式传输给用户。
通过这种方式,您可以更改关于谁应该有权访问的逻辑,而无需更改任何其他应用程序。
将http://someorg.net/myimage.gif
和http://someorg.net/myscript.php?token=887799&img_id=ddtw88
添加到浏览器没有什么区别,但显然需要使用GET
,因此需要时间限制值,因为用户可以看到重用它。