论坛首页 AJAX版 DWR

关于dwr的安全性问题

浏览 458 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2008-07-04 关键字: dwr, 安全
在一些网站中,我们虽然使用了AJAX,但是我们并不希望用户能够私自调用这些AJAX,因为有些AJAX调用会包含对数据的更新操作,即使是只读的操作,也不希望用户能在本地进行直接调用。

在 Michael Chen 的这篇文章中 http://michael.nona.name/archives/142 ,提及了ajax应用中的安全问题,并且给出了一个临时的解决方案。虽然我用的不是 Buffalo ,而是 dwr,但是这篇文章对于 dwr 仍然有帮助。

不过正如 Michael Chen 在文章中所说,他给出的解决方案没有经过详细的测试,所以我在用了一段时间之后,还真就发现了问题。

文中的解决方案的关键是判断 request的Cookie,虽然 dwr 中取得request的方式与 Buffalo不同,但是并不影响,而且经过测试,也确实有效。

可是之后网站增加了静态页面的生成功能,这样用户就可以直接访问静态页,而非提交一个请求。结果问题出现了。

当在静态页中调用 dwr 的应用时,request的 Cookie 也是空的。这样之前的解决方案就无效了。

那么怎么办?或许 http 的 header 中的 referer 能给点帮助!

String referer = request.getHeader("referer");


通过这样的方式我们就能得到一个 referer,那么这个 referer是什么呢?就是请求这个AJAX的地址。我想熟悉盗链功能的朋友对它不会陌生。

这样,当我们从 www.xxx.com 请求 www.xxx.com/index.html 时,而这个 index.html 中又包含一个 AJAX 的调用的时候,我们就可以这么判断:

String referer = request.getHeader("referer");

if(!referer.startsWith("http://www.xxx.com")) {
    throw new Exception();
}


这样就可以保证只允许网站内部的资源访问 AJAX 的应用了。

经过测试,可以做到避免使用浏览器的方式从本地私自访问AJAX应用。但是我想这种方式仍然会存在漏洞,希望大家能给出更好的方案。
   
论坛首页 AJAX版 DWR

跳转论坛:
JavaEye推荐