AJAX只能访问
我最近开始用PHP编写大量AJAX支持的脚本,事实是,AJAX调用访问的文件也可以直接使用,如何禁用它?
你无法可靠地防止这种情况发生。 关键是不要考虑有人直接访问这个文件作为安全问题 – 计划这可能,你将在一个更安全的地方。
有些人可能会推荐看起来像这样(或类似)的代码:
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { // more code here }
然而,问题的事实是HTTP标头可以很容易地被欺骗,并且不是保护代码的手段。 在我在一个繁忙的网站上进行测试的时候,我注意到这些标题实际上并不是那么可靠。
正如其他人在回复中建议的那样,这是不可能的。 这是因为计算机安全的支柱原则之一:你永远不能相信客户。 这就是为什么我们validation客户端的所有输入等。
而不是试图阻止其他客户访问您的服务,而是花时间编写防御性Web服务。 这意味着,请确保恶意用户无法通过业务逻辑进行注入或其他攻击。 例如,确保所有电子邮件都有效,人们不会购买负数美元等物品。
哦,网络服务是开放的事实是一件好事! 您正在为用户提供开放式API,这非常简洁! 也许不是试图锁定你的社区而是接受它 – 给他们一些关于如何与你的服务接口的文档,他们会创造更多的客户。 您可以使用其中一个用户,而不是购买iPhone SDK并花时间学习Objective C.
没有办法直接禁止访问。 由于始终可以制作查询以匹配您提出的任何条件。
如果使用XmlHttpRequest来查询服务器,它会添加一个标题,可以使用以下内容检测:
/* AJAX check */ if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { //Do something here }
也许你应该使用一些XSS防御技术,比如传递一些安全密钥和ajax请求。 并且只给出了与加载页面一起进行异步查询的javascript的关键。
在这种情况下,您不必担心人们直接将请求传递给文件,只要您保持密钥安全,使用POST调用操作并进行健全性检查。
在您的应用程序中使用会话。
编辑:
-
在会话中注册您的网站,我使用UUID。
-
设置具有相同值的cookie,您在会话中使用该值。
-
使用包含此值的参数发送AJAX请求。
-
比较会话,cookie和参数的值。
- 使用jQuery ajax表单提交
- 来自卸载事件的同步AJAXpost:如何确保用户在下一页加载时从数据库中看到最新的信息
- Symfony2:如何使用Ajax强制下载多个图像在一个zip文件中
- 带有附加数据的jQuery文件上传
- jQuery ajax .load()无法在IE6 / IE7 / IE8中运行 – 在FF / Safari / Chrome中工作
- jquery addClass和removeClass with setInterval
- Rails不引人注目的javascript(UJS)ajax:在追加数据参数之前
- 使用jQuery监听未使用jQuery.AJAX加载的AJAX加载
- Ajax提交表单数据类型问题