[转]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 代码
会带来的问题就是如果第三方需要使用你提供的服务的话,那么也需要你提供Token。
最后一种方法就是使用传统的HTTP Session来管理认证。当用户访问某个Ajax风格的网站时,在Session中存放一个允许他们访问受限资源的属性。当XMLHttpRequest发送请求的时候,它会发送当前网站中所有活动的session cookie。这种做法是较容易实现,而且较好的办法。
这种方法要求Ajax页面和XML数据需要在同一个域中,否则cookie发送不到。
Ajax Security (2) - Eric Pascarello的访谈
关键字: ajax security
文章中提到了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:
关键字: ajax security
|