0
点赞
收藏
分享

微信扫一扫

越权漏洞的原理与防护

向上的萝卜白菜 2021-09-28 阅读 68
安全开发

一、越权漏洞

当用户发起请求后,服务器在处理请求的时候,没有对该用户的该操作进行权限的判定,从而导致黑客利用该漏洞,达到查看、修改、增加、删除不属于他权限范围内的数据。

越权漏洞一般分为水平越权和垂直越权:

  • 水平越权是指角色权限相同的用户之间能非法地互相操作对方的数据;
  • 垂直越权是指不同角色权限地用户之间能非法地互相操作对方的数据;

二、水平越权

2.1 漏洞原理

水平越权一般出现在用户请求对数据进行增删改查的时候,程序没有对该用户的请求是否可以合法地操作数据进行校验。比如:

  • A用户登录网站后,拥有了登录信息;

  • A用户可以正常地查询自己的某次购买记录;

    http://localhost:8080/my-app/query?transactionId=123
    

    此时程序中只是判断请求的发起用户是否是登录状态,只要是登录的就可以根据transactionId进行该查询操作。

  • 某次A用户无意间看到了坐在旁边的同事B的transactionId为999,然后默默地记了下来;

  • A用户将上面的请求连接中的参数值改为B用户的,就能看到B用户的某次购买记录。

    http://localhost:8080/my-app/query?transactionId=999
    

    当然,请求参数可以不放在URL中,可以放在POST请求中,但是一样可以使用BP工具进行篡改参数值达到相同的效果。

2.2 漏洞防范

一般的防御措施如下:

  • 服务端程序在处理这个查询请求之前,先判断下这个交易ID是否是属于当前登录者的,如果是才允许查询请求;
  • 查询请求的SQL在最后加上限制条件归属人为当前登录者,如果不是那么查询结果行数就为0;

以上两种防范措施详细内容可以参考:水平越权的常见解决方法

三、垂直越权

3.1 漏洞原理

垂直越权是指不同级别或者不同角色之间的越权。既可以是向上越权也可以是向下越权。其发生的原因是程序没有对该次请求是否为该角色的合法请求进行校验导致的。比如:

  • 管理员A登录网站后,拥有了登录信息;

  • 管理员A可以删除论坛上的某个帖子;

    http://localhost:8080/my-app/delete?articleId=987
    

    此时程序中只是判断请求的发起用户是否是登录状态,只要是登录的就可以根据articleId进行该删除操作。

  • 普通用户B无意间在A的背后看到了这个请求URL,然后默默地记了下来;

  • 普通用户B自己在登录论坛后,访问如下的链接,然后猜测可能的articleId;

    http://localhost:8080/my-app/delete?articleId=xxx
    

    如果论坛真的有这个articleId,那么帖子就会被普通用户B删除,显然这是不合理的。

3.2 漏洞防范

  • 基于角色的权限控制

    该方案适用于只要角色相同,权限就一定相同的业务场景。

  • 基于资源的权限控制

    该方案适用于没有角色这一概念,或者有角色,但是相同角色之间权限也可能不同的业务场景。

  • 基于第三方权限框架

    轻量级权限控制框架Shiro和企业级权限控制框架SpringSecurity都可以实现如上两种方案的权限控制。

举报

相关推荐

越权漏洞---zkaq

越权漏洞的理解

JWT越权访问漏洞

越权漏洞学习

WEB漏洞-逻辑越权

Pikachu靶场--越权漏洞

水平越权与垂直越权

0 条评论