文章中大概提到了采用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发送不到。