Php 仅AJAX访问
我最近开始用PHP编写大量支持AJAX的脚本,事实是,AJAX调用访问的文件也可以直接使用,如何禁用它?您无法可靠地防止这种情况发生。真正的关键是不要考虑有人直接访问这个文件作为一个安全问题-这个计划是可能的,你将在一个更安全的地方。 有些人可能会推荐这样(或类似)的代码:Php 仅AJAX访问,php,jquery,ajax,Php,Jquery,Ajax,我最近开始用PHP编写大量支持AJAX的脚本,事实是,AJAX调用访问的文件也可以直接使用,如何禁用它?您无法可靠地防止这种情况发生。真正的关键是不要考虑有人直接访问这个文件作为一个安全问题-这个计划是可能的,你将在一个更安全的地方。 有些人可能会推荐这样(或类似)的代码: 然而,事实是HTTP头很容易被欺骗,并且不是保护代码的一种手段。不久前我在一个繁忙的站点上进行测试时,我注意到这些头文件实际上并不那么可靠。没有办法直接禁止访问。因为查询总是可以精心编制以匹配您提出的任何条件 如果使用Xml
然而,事实是HTTP头很容易被欺骗,并且不是保护代码的一种手段。不久前我在一个繁忙的站点上进行测试时,我注意到这些头文件实际上并不那么可靠。没有办法直接禁止访问。因为查询总是可以精心编制以匹配您提出的任何条件 如果使用XmlHttpRequest查询服务器,它会添加一个标头,该标头可以使用以下方法检测:
/* AJAX check */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
//Do something here
}
在应用程序中使用会话 编辑:
正如其他人在答复中所建议的那样,这是不可能的。这是因为计算机安全的一个基本原则:你永远不能信任客户。这就是为什么我们要验证来自客户端的所有输入,等等 与其试图阻止其他客户端访问您的服务,不如花时间编写防御性web服务。也就是说,确保恶意用户不会在您的业务逻辑中漏掉注入或其他攻击。例如,确保所有电子邮件都是有效的,人们购买物品的价格不是负美元,等等
哦,事实上web服务是开放的是一件好事!您为您的用户提供了一个开放的API,这非常整洁!也许你不再试图封锁你的社区,而是拥抱它——给他们一些关于如何与你的服务交互的文档,这样他们就会有更多的客户。与其购买iPhone SDK并花时间学习Objective C,不如让您的一位用户学习。也许您应该使用一些XSS防御技术,比如在ajax请求中传递一些安全密钥。并且只将密钥提供给与加载的页面一起进行异步查询的javascript
<script type="text/javascript">
window.csrf_key = '<?php $user->getCsrf(); ?>';
</script>
window.csrf_键=“”;
在这种情况下,您不必担心有人直接将请求传递到文件,只要您确保密钥安全,使用POST调用操作并进行健全性检查。这是可能的,但不可靠。除此之外,所有有效点都将打开。或者,您可以传递一个参数(例如,
?ajax
),但这更容易欺骗。我没有投票否决您,但这仍然不是一个可靠的方法。它可能很容易实现,但也可能被欺骗。
<script type="text/javascript">
window.csrf_key = '<?php $user->getCsrf(); ?>';
</script>