[转]Ajax Security

Ajax Security

下面的内容参考自:http://www.whirlycott.com/phil/2005/04/15/security-in-an-ajax-world/ 文章中大概提到了采用Ajax的RIA在安全方面会遇到的问题,主要是如何限制用户访问受保护的数据。
文章中提到了3种方法,都是针对返回数据是XML格式的:
首先就是返回的XML数据的Tag是由服务器随机生成的,并在HTML中内嵌用来查询的XPath语句。具体做法是服务器首先生成正常内容的XML数据,其中的Tag都是有意义的。然后通过XSLT变化,把XML数据的Tag变成随机的。
这种方法由于在服务器进行XSLT变换,增大了服务器的开销;另外需要在使用该XML数据的HTML页面中嵌入准确的XPath语句,所以整合起来不方便。
其次就是在服务器动态生成的页面中嵌入UUID,作为HTTP请求头中的一个值发送给服务器。服务器可以验证Token是否正确来判断是否允许访问。
js 代码

    //Generated on the server and included as part of the dynamically generated HTML

    var ajaxToken = “dff0194b-384f-43d3-0059-889247de5f88″;         

    //Make a request for some data and include the token

    var req = new XMLHttpRequest();    req.setRequestHeader(”AJAX-Token”, ajaxToken);   


会带来的问题就是如果第三方需要使用你提供的服务的话,那么也需要你提供Token。
最后一种方法就是使用传统的HTTP Session来管理认证。当用户访问某个Ajax风格的网站时,在Session中存放一个允许他们访问受限资源的属性。当XMLHttpRequest发送请求的时候,它会发送当前网站中所有活动的session cookie。这种做法是较容易实现,而且较好的办法。
这种方法要求Ajax页面和XML数据需要在同一个域中,否则cookie发送不到。

Ajax Security (2) - Eric Pascarello的访谈
关键字:   ajax security     
以下内容参考自:http://searchwebservices.techtarget.com/qna/0,289202,sid26_gci1164745,00.html 这篇文章说的是对Eric Pascarello的一次访问的内容。Eric Pascarello是Ajax In Action的作者之一。
Eric Pascarello首先不认为XMLHttpRequest增加了太多的安全问题。因为XMLHttpRequest也不过是一个普通的表单提交。不使用XMLHttpRequest,而是普通的表单提交的话。我们一样可以通过查看页面的源代码来查看表单的action地址,获取提交的参数等。
Eric Pascarello强调了服务器验证的重要性。任何客户端的验证,比如disabled,read-only和hidden元素只是一个笑话。在浏览器地址栏中输入javascript:document.FormName.ElementName.disabled=”false”;void(0);  那些受保护的页面元素的属性就更改了。没有数据是安全的,所以服务器验证很重要。
Ajax的确引入新的问题,如果开发人员设计了很差的Ajax控件的话,很容易引起服务器崩溃。比如类似Google Suggest这样的应用,如果不在客户端和服务器做cache,原来是用户输入完成之后才提交请求,现在是用户每输入一个字就提交查询,不缓存的话,查询的数目就增大了数倍。
Eric Pascarello最后说到的是关于跨域的请求(cross-domain request),这会带来很多问题,应该尽量避免。如果的确需要的话,比如调用第三方提供的服务,就需要小心谨慎。

Pascarello’s Rules of Thumb for Ajax Security:
  • If you use user authentication, make sure you check for it on the request page!
  • Check for SQL injections.
  • Check for JavaScript injections.
  • Keep the business logic on the server!
  • Don’t assume every request is real!
  • Check the data with validation!
  • Look at the request’s header information and make sure it is correct.
Ajax Security (3) - Ajax的问题
关键字:   ajax security     
以下内容参考自:http://www.it-observer.com/articles/1062/ajax_security/
Ajax安全的大多数问题来自于服务器端的有缺陷的实现。使用安全coding技术的良好设计会使得Ajax更加安全。
其他问题:
  • 新的技术:Ajax毕竟是一些新技术,在网上能找到的好的例子较少。
  • 非传统的设计:Ajax包括客户端和服务器两个部分,需要不同的技术。
  • 太多的脚本:Ajax导致过多的脚本以及与此对应的服务器页面。
  • 为了Ajax而Ajax的想法:这种想法是不正确的,Ajax会带来很多很cool的效果,但是与之而来的是相应的测试。
  • 不安全的通讯:Ajax调用传输的数据可能很小,但是这些数据可能是隐私和保密的。
  • 服务器端的访问控制:使用JavaScript过程来调用Ajax可能会掩盖明显的编程错误。
  • 服务器端验证:很重要。
  • 客户端验证:如果客户端是执行服务器返回的JavaScript代码的话,验证也是必须的。
Ajax安全提示:
为了成功,需要从一个好的计划开始。集中精力来降低和简化Ajax调用,为响应创建标准的格式(一般是XML)。
  • 遵循最佳实践。尤其包括检查访问控制和输入验证的缺陷;保证敏感数据通过SSL传输。
  • 不要认为服务器端的Ajax对访问控制和用户输入的验证可以取代服务器上的检查。使用Ajax不会减少验证的工作量,反而会加大。
  • 不要认为客户端的混淆可以包含你最重要的商业秘密。使用JavaScript是隐藏编程技巧和领先竞争者的很差的方式。
  • 最后,对你的开发团队进行严格的控制。使用Ajax可以达到很棒的效果,但是可以考虑把它们移到第二版再说,首先集中精力构建稳定的第一版。
网站开发最佳实践的参考网站:
Open Web Application Security Project (OWASP)
http://www.owasp.org/


posted @ 2008-04-03 13:52  df1019  阅读(332)  评论(0编辑  收藏  举报