关于dwr的安全性问题

在一些网站中,我们虽然使用了AJAX,但是我们并不希望用户能够私自调用这些AJAX,因为有些AJAX调用会包含对数据的更新操作,即使是只读的操作,也不希望用户能在本地进行直接调用。

在 Michael Chen 的这篇文章中 [url]http://michael.nona.name/archives/142[/url] ,提及了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应用。但是我想这种方式仍然会存在漏洞,希望大家能给出更好的方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值