Fork me on GitHub

asp.net core安全事项(下)

 

 

  • 越权

越权是非常严重的安全漏洞,通常状态是开发人员对请求的限制逻辑不严格导致的。

如果系统中有角色的概念,越权可能出现不同角色间的越权和同角色间的越权。

  相同角色:

  A用户,B用户是相同的角色。

  A用户和B用户都可以调用 /photo/{id}。

  这个url,如果在后端不判断这个phtoto的id属于那个用户的,就很容易造成越权,这里只要A用户登录验证通过后,就可以用这个api,换id来请求到B用户的照片信息,这种情况下通常在后端要把id和用户id都当成查询条件,去库中查询,这样就能有效防止越权。

  其实就是加了一层过滤,是谁的数据。如果数据归属权有层级,交叉,那将是更复杂的控制,不过这些都是业务逻辑决定的。

 [HttpGet("/photo/{id}")]
        public IActionResult GetPohot(int id)
        {
            //数据集全
            var photos = new List<dynamic>
            {
                new {ID=1, Name="第一张",User="A"},
                new {ID=2, Name="第二张",User="B"},
                new {ID=3, Name="第三张",User="A"},
                new {ID=4, Name="第四张",User="B"}
            };
            //越权
            //return new JsonResult(photos.SingleOrDefault(s => s.ID == id));
            //增加数据所属条件
            return new JsonResult(photos.SingleOrDefault(s => s.ID == id && s.User == User.Identity.Name));
        }

  有时,我们很容易忽略一些数据所有权,比较上传的文件,图片,属于那个用户,可能在表里对文件,图片和用户作了绑定,但当前端访问或下载这个文件,图片时,并没有去对文件,图片所有权作个判断,从而造成越权风险。

 

  不同角色:

  A角色,B角色有不同的功能

  很多时候,不同的角色有不同的功能,这些功能是通过菜单在UI上显示,当不同的角登录后,只能看见属于自己的功能,如果不在服务端对每个api和角色加以映射判断(api层的权限设定很重要),就很容易造成越权,虽然A角色在UI上看不到B角色的功能菜单,一但A记下B角角功能的url,也会很顺利的访问到B角色的功能。

  还有一个就是权限控制模块的处理,如果多个角色都有不同的权限控制权限,一定要设置好权限的范围控制,权限低的不能添加或修改成权限高的用户,否则后果很严重,老板很生气。

 

  想要更快更方便的了解相关知识,可以关注微信公众号 
 

 

 

posted @ 2022-02-03 13:37  桂素伟  阅读(64)  评论(0编辑  收藏  举报