如何拒绝直接访问AJAX目录中的文件

时间:2010-11-08 15:36:41

标签: php

我有几个页面通过jQuery .ajax调用内容。我不希望页面上显示内容,这就是为什么我使用.ajax而不显示/隐藏内容的原因。我想保护AJAX目录中的文件不能通过浏览器URL直接访问。我知道PHP标头可能是欺骗性的,不知道是否更好地使用“访问”键或尝试通过htaccess进行。

我的问题是什么是更可靠的方法?没有登录/未登录的用户状态,主页需要能够从AJAX目录中的页面中提取内容。

thx

3 个答案:

答案 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.gifhttp://someorg.net/myscript.php?token=887799&img_id=ddtw88添加到浏览器没有什么区别,但显然需要使用GET,因此需要时间限制值,因为用户可以看到重用它。