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角色的功能。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值