Web站点越权访问情况及处理方式汇总

最近安全测评,遇到Web站点越权访问的事情,平时开发都没太在意,现在通过项目测评才意识到问题的严重性;通过网上查询汇总梳理如下,供大家参考,主要有以下几种情况,分别对应不同的处理模式;文章描述主要针对Java语言,其他语言也应该类似。

1. 没有用户登录,就可以直接访问系统页面;
处理方式有两种:
a)系统页面不多,直接在Web站点过滤器filter中增加session判断,需要在登录后session记录登录账号信息;这种处理简单
b)子系统和站点页面比较多 ,这种一般就需要做单点登录;基于开源cas的单点登录是比较流行,这方面的资料大家可以网上查询非常多;
2. 用户登录成功,但对于没有权限的页面或action;也可以直接访问(浏览器直接输入或爬虫等工具)
一般业务系统都是按照功能模块授权,用户登录后能访问哪些功能页面都在数据库存储,登录后系统会返回显示,这是针对普通用户来说的安全;但如果是破坏的用户则抵挡不住直接访问action或页面url;
这种情况就是一般说的垂直权限攻击。其原理是由于Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。
处理方式:
a)要求不严格的,只是禁止用户直接在浏览器里输入url或action地址访问的情况
Web站点越权访问情况及处理方式汇总
在filter过滤器中增加判断,看请求的头里refer参数是否你的网站页面;
Web站点越权访问情况及处理方式汇总
这里不解决用户自己构造cookie去模拟请求的情况;【高级测试用户或**人】
b)要完全限制用户访问没有权限的action
对于此种有三种解决办法
一种是为所有的action进行授权,用户在访问action时进行权限判断;此种后期运维人员工作量耗大,实际操作性差。
再一种是将action与功能模块关联,建立一张关联表;功能模块是进行过授权的,底层在访问action时增加判断,看该action关联的功能模块对应当前登录用户是否有权限。(具体参照:https://www.cnblogs.com/b-code/p/9262735.html);为了提高效率适当进行权限缓存。
最后一种是在页面中添加Token防止越权访问,这种前端页面必须都是jsp页面,访问页面时前端和服务端生成统一的token令牌;jsp提交到后台时判断令牌是否一致;但这种方法的缺点是测试用户也可以进行令牌模拟,还不能从根本解决。具体可参考:https://blog.****.net/chinawszjr/article/details/51096095
3. 对于url中传输userid的情况,可以串改userid达到数据操作
这种情况就是水平权限攻击,也叫作访问控制攻击。Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或者在判断数据所属人时从用户提交的表单参数中获取了userid。导致攻击者可以自行修改userid修改不属于自己的数据。所有的更新语句操作,都可能产生这个漏洞。
处理方式主要是userid都要从session获取,不要靠参数传递。
具体可参见:https://blog.****.net/tanzhen1991910/article/details/53220593

大家如果还有其他解决方式,也不吝赐教!