Ajax安全问题和可能的攻击

时间:2011-05-20 01:20:27

标签: jquery ajax security

我正在处理的项目,对页面上的每个链接使用AJAX调用,更具体地说,jQuery AJAX调用,除了登录之外,每个提交的表单都是通过AJAX提交的,还有一些json,和xml,在混合中,我的问题是,这有什么安全隐患?所有服务器端代码都是PHP,所有内容都被正确转义。

3 个答案:

答案 0 :(得分:13)

AJAX中没有任何特定内容。这只是您的浏览器执行的请求。它只是一般的HTTP请求,应该像任何其他HTTP请求一样受到保护,无论其XHR性质如何。

答案 1 :(得分:2)

人们普遍认为,没有必要使用XSRF令牌来保护仅通过GET公开数据并通过cookie授权用户的服务。

事实并非如此。当输出是JSON数组时,这些过去常常具有AJAX特定的XSSI漏洞。

考虑一个返回/getfriends等数据的服务[ { "name": "Alice" }, { "name": "Bob" } ]

攻击页面可以

 <script>
   var stolenData;
   var RealArray = Array;
   Array = function () {
     return stolenData = new RealArray();
   };
 </script>
 <script src="https://naivedomain.com/getfriends" type="text/javascript"></script>

并且第二个<script>标记使用用户的Cookie在域中加载了JSON 由于EcmaScript 3中的怪癖(在EcmaScript 5.0和现代ES 3解释器中修复),页面可以读取被盗数据,因为JavaScript解析器在解析JSON响应中的Array时调用了被覆盖的[...]构造函数

除了普通的基于cookie的方法之外,通过XSRF令牌保护这些服务解决了这个问题,例如禁止GET,通过自定义标头授权以及包括解析器。解析断路器通过使响应无效JSON来工作,例如返回throw 0; [{ "name": "Alice" }, { "name": "Bob" }]以便XHR客户端可以删除throw 0;前缀,但是通过<script>加载的客户端不能。{/ p>

最后,由于JavaScript解析器将加载的脚本解析为程序,因此这只会影响返回JSON数组的服务。返回/getfriend的{​​{1}}服务不会受到攻击,因为该内容不是有效程序 - 它被解析为具有无效标签的块。但是像{ "names": ["Alice", "Bob"] }这样的无效JSON很容易被攻击,因为这是一个有效的程序。

答案 2 :(得分:0)

Ajax违反了有关POST数据中保留字符转义百分比的安全规则。纯粹而简单,这允许将恶意代码直接注入SQL模式,这些模式可以是诸如PHP代码之类的东西,以便以后在主机上检索和执行。在AJAX开始转义所有保留的GET和POST字符之前,正如普通浏览器对表单所做的那样,如果没有针对恶意代码段的每次通信进行完整扫描,就不会信任它。