背景前提:
针对UserRemote这个远程调用
其中有两个方法:
deleteUser和existsUserID
都是可供远程调用的。
问题描述:
假如某个页面只需要用到existsUserID来判断用户是否存在,那么就一定有调用deleteUser来删除用户的能力,这显然是不安全的。
举例:
1) 某用户登录后输入url可以到达填写信息的页面
2) 这里会调用existsUserID
因此引用js文件
<script src='<c:url value='/dwr/interface/UserRemote.js'/>'></script>
3) 在地址栏中输入
javascript:UserRemote.deleteUser(75,function(date){alert(date);});
4) 这样意味着一个普通用户也能执行删除别的用户的操作
解决方案:
因为dwr不能(或者是我不知道)获取Session,难以做权限判断,而且在业务层也不应该做过多不纯粹的工作,应该交由框架级的拦截器做这个权限工作。