目录
越权漏洞
越权漏洞是Web应用程序中一种常见的安全漏洞。该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查(比如说修改数据包的值或者直接访问其他用户相应页面的链接),访问或者操作其他用户或者更高权限用户才能访问到的页面或数据。
越权分为水平越权和垂直越权:水平越权指的是攻击者越权访问到了一个和他拥有相同权限用户的资源,而垂直越权指的是一个低级别用户访问到了一个高级别用户的资源。
越权漏洞的挖掘
在实际的代码安全审查中,这类漏洞往往很难通过工具进行自动化检测,因为必须通过人工判断,人工判断必须先分析当前网站处理业务的逻辑,然后如下:
检测水平越权
- 打开两个浏览器,分别用普通用户登录
- 查看每个页面的链接,抓包分析其参数的意义,找到与用户名有关的参数,修改成其他用户,重放,看能否访问。如果能访问,则存在水平越权
检测垂直越权
- 打开两个浏览器,一个浏览器用超级管理员admin身份登录,一个浏览器用普通用户身份登录
- 仔细对比两个浏览器之间,哪些页面是管理员用户独有的,然后复制链接到普通用户浏览器打开,或者抓包分析包的结构然后篡改重放,看能否访问。如果能访问,则存在垂直越权。
越权漏洞的修复
对用户操作进行权限校验,防止通过修改参数进入未授权页面及进行非法操作,建议在服务端对请求的数据和当前用户身份做校验检查。先判断当前用户的身份,然后判断其是否对该页面有操作权限!
流程描述:在服务器接收到用户发送的页面访问请求时,根据预设的识别策略,从用户的页面访问请求中提取该用户对应的用户唯一标识信息,同时提取所述页面访问请求对应的应答页面中的表单及该表单中不可修改参数,将所述表单及不可修改参数与所述用户唯一标识信息绑定后记录到参数列表中;检测到用户提交请求页面的表单时,将所述请求页面的表单及不可修改参数与该用户对应的所述参数列表中记录的表单及不可修改参数进行比对,控制该用户的访问。
可以总结为:
- 服务器端必须对每个页面链接进行权限判断
- 用户登陆后,服务器端不应再以客户端提交的用户身份信息为依据,而应以会话中服务端保存的已登陆的用户身份信息为准
- 页面提交的资源标志与已登陆的用户身份进行匹配比对,然后判断其对当前链接是否有权限
- 必须在服务器端对每个请求URL进行鉴权,而不能仅仅通过客户端的菜单屏蔽或者按钮Disable来限制
登陆时将用户名存入session
session.setAttribute("admin",username);
在相关页面判断
if((String)session.getAttribute("username")!=admin){
(response.sendRedirect("error.jsp"));