【需要重视的BUG】:偷权限的情况

!!如果您生产环境用到了Blog.Core系统(本文是我自己逻辑问题,和官方没关系哈),且没有做其他修改,且没有使用Ids4认证中心来授权认证,请看完本文,并即时做系统维护。


----------------------------------------------------

f09348f82ae8681c83964ba23eb82ca7.png

(平台的第一个安全BUG,已修改,请更新)

9ae7b42ee19f2aceda2a6a827ecc14dc.gif

BCVP框架,是基于:

ASP.NETCore5.0+VUE.js+IdentityServer4等核心技术,实现的前后端分离与动态认证鉴权一体化平台。

01

故事描述

通过修改令牌,可更新权限

Refresh Token.

故事源于文章开头的图片,今天QQ群中,偶然看到了大家在讨论问题,最后发现是一个小伙伴(@---)发现了系统的漏洞,这里感谢他哟,通过一系列操作会篡改自己的权限,具体的过程是这样的:

1、在Swagger中,用自己的测试账号登录,获取Token令牌;

2、在jwt.io等工具内,修改jti为超级管理员的id;

3、用更换后的令牌,去刷新令牌接口发起请求;

4、得到最终的新令牌,此刻,你已经拥有管理员权限;

相关的动图,可以参考:

08b4a072181ef996bce26d739d3d040e.gif

(公众号最多300帧,详细的可以自己操作)

到这里你应该能看懂了,核心的BUG就出在刷新令牌的时候,我直接硬解了TOKEN,然后获取到了数据,根据UID直接生成了新的令牌,这种思路没问题,可是技术就差了,没有做很好的集成和封装,才导致了这个问题,你可能会说,官方不是有签名校验么,当然有,只不过这个接口是匿名的

不过如果你用Ids4做认证平台是没有这个问题的,毕竟人家都考虑到了嘛,

顺着思路,大家也可以多看看,多测测,还有没有其他隐藏问题。

02

修改BUG问题

增加令牌校验

CreateEncodedSignature.

这个问题已经被解决了,具体的代码可以看我的提交记录,这里感谢@wuare老铁提供技术帮忙:

6fe9a3a0520b0fe14c92c2bfb62d45dc.png

(已经提交到Github了,欢迎查看)

思路其实很简单,就是在获取用户信息的时候,增加一次令牌校验,看看当前令牌是否被篡改了,不过解题过程可以分享下:
1、在登录的时候,我们调用

new JwtSecurityTokenHandler().WriteToken

来生成令牌;

2、去查看Write源码,发现用

JwtTokenUtilities.CreateEncodedSignature (string.Concat(rawHeader, ".", rawPayload), signingCredentials);

来生成具体的令牌;

937719a335aaaa8364e276ac63a59fef.png

3、那我们就仿照它的这种写法,我们也对token进行解析,将头部和载荷拿出来,加盐,看看和令牌的签名是否一直;

public static bool customSafeVerify(string token)
{var jwtHandler = new JwtSecurityTokenHandler();var symmetricKeyAsBase64 = AppSecretConfig.Audience_Secret_String;var keyByteArray = Encoding.ASCII.GetBytes(symmetricKeyAsBase64);var signingKey = new SymmetricSecurityKey(keyByteArray);var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);var jwt = jwtHandler.ReadJwtToken(token);return jwt.RawSignature == Microsoft.IdentityModel.JsonWebTokens.JwtTokenUtilities.CreateEncodedSignature(jwt.RawHeader + "." + jwt.RawPayload, signingCredentials);
}

注意下,可能会和别的类冲突,注意命名空间的引用即可。

这样就没有问题了,在刷新令牌的时候,做个判断,来看看是否被篡改了:

if (tokenModel != null && JwtHelper.customSafeVerify(token) && tokenModel.Uid > 0)

PS: 这种方案可能不是最优的,也欢迎大家多多提意见吧,集思广益哟。

好啦,本次就到这里了,还是很感谢提出这个问题的小伙伴的,不仅是让我学到了知识,更让框架更完善,加油加油!

希望本次更新没有让您对BCVP框架的质量受到影响。

ac2235924908c8c877478ee7aa7a1042.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Angular运行在java_在本地运行现有Angular项目

我是Angular的新手,我正在尝试在我的机器上运行Angular的现有项目 . 我做了很多测试并且跟着很多文章 . 但无法运行我的项目 .我有这样的项目文件:我在我的系统上安装了nodejs . 并根据文章按照以下说明操作:将目录更改为我们的仓库cd myproj…

自找麻烦

2019独角兽企业重金招聘Python工程师标准>>> 真是想狗想的要发疯了,所以想买条狗,但是阿拉斯加,哈士奇,金毛,拉布拉多,苏牧,喜乐蒂现在我都买不起,他们都是很听话的狗&am…

Prism+WPF使用DependencyInjection实现AutoMapper的依赖注入功能

前言在使用PRISMWPF开发项目的过程中,需要使用AutoMapper实现对象-对象的映射功能。无奈PRISM没有相关对AutoMapper相关的类库,于是转换一下思想,在nuget 中存在有关使用Microsoft.Extensions.DependencyInjection来实现AutoMapper的依赖注入…

webSocket原理及其案例

常见的消息推送方式 1:轮询方式 浏览器以指定的时间间隔向服务器发出HTTP请求,服务器实现试试返回数据给浏览器 缺点:数据有延时、服务器压力较大。 2:长轮询 浏览器发出ajax(异步)请求,服…

这是啥?也太秀了吧?

1 请坐下2 这是什么愿望,感觉老天都看不下去了!3 像极了手机落在上铺的你!4 真正智慧家居,免通电。5 你以为它是土豆,其实。。6 葫芦不一定叫葫芦葫芦有各种奇奇怪怪的形状和名字7 我发光去了!你点的每个赞…

爱数应用容灾部署方案三

级联复制的异地容灾方案部署 爱数应用容灾部署方案可在异地部署远程容灾站点实现远程应用容灾方案,采用级联复制模型,在本地和远程分别部署容灾站点,克服实时复制对带宽延迟较高的缺点,获得最佳的容灾效果。并且可根据用户的网络和…

30张不明觉厉的照片,看几遍终于看懂了

全世界只有3.14 % 的人关注了爆炸吧知识网络上很多照片,虽然没经过PS,第一眼还是会觉得诡异。仔细看看才发现....哇噢!总觉得她的头上有一撮尖尖的毛?狗狗怎么做得出这个表情?震惊!发现没脖子的长颈鹿&…

排序集合的一个小坑

原来一直用SortList,SortedDictionary来作为键值对存储的排序集合来用,心中就默认是以key按ascall排序来存放的,在之前的案例中也没有出现问题,在最近一个demo中,打破了原来的自以为是的认识,因为在key中不…

爱是天时地利的迷信

1 别人撒娇你撒娇2 据说套着这个白袋子晒鞋鞋就不会发黄了。。3 蚂蚁:为什么要欺负我!4 这是天空的心电图吗5 有回应的喜欢真好 6 随主人这事儿原来是真的…7 被别人喜欢时的心理活动图自回忆专用小马甲你点的每个赞,我都认真当成了喜欢

Juniper Firewall多进单出配制实例

Technorati 标签: juniper,多进单出,配置实例,firewallJuniper firewall多進單出配置。想法是這樣的用一台firewall將這幾條ISP線路都接入,再通過一個trunk口出來,通過一台L2 switch劃分出幾個VLAN,分別對應不同的ISP線路。這樣做的好處就不多…

刷题≠学好数学,近百位名校名师告诉你,数学是怎么学好的?

▲ 点击查看 数学是个神奇的科目,它存在着一种“梯次掉队”的现象。不是说你低年级的知识学好了,高年级的知识就一定能学好。相信大家都有这种体会:一二年级孩子成绩不相上下,但到三四年级的时候,有一批学生的数学成绩…

android 系统之ContentProvider

基于上一篇的数据库操作,又写了一个ContentProvider的示例。把SQLiter 的数据提供出去供别的项目进行访问。 这一篇的代码要求熟悉SQLiter 的API. 首先,我们编写一个类extents ContentProvider ,重写他的方法。 URI 在http 中我们称为统一资源…

你是中层管理者?嗯,一个表面看似风光,实际却很 “鸡肋” 的重要岗位

这是头哥侃码的第246篇原创每年的六七月份,上海都会进入梅雨季节。这段时期的上海天气就好比大小姐的脾气,阴晴不定,完全看心情做事,心情好的时候,给你个阳光,让你的生活和休闲时光多一些灿烂,心…

重温SQL——行转列,列转行(转:http://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html)...

行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。 用传统的方法,比较好理解。层次清晰,而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法…

要男女朋友有什么用?

1 题:我不要面子的嘛!2 狗都有人给撑伞了。。3 这大概就是传说中的一见钟情吧4 5 南方人说话有多软糯6 男女朋友有什么用你点的每个赞,我都认真当成了喜欢

低代码应用创新成果——轴承行业数字化智造系统(含MES/ERP/WMS)

轴承是当代机械设备中一种不可或缺的零部件,广泛应用于汽车、铁路车辆及各类工业机械和家用电器等国民经济的重要领域,是一种节约能源、提高效率的伟大发明。轴承行业作为装备制造业的先锋,一直以来都走在数字化转型的前列,引领行…

HelloSilverlight

一&#xff1a;输入姓名并选中一个日期&#xff0c;将在下面显示 二:XAML代码 <UserControl x:Class"HelloSilverlight.MainPage"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2…

21世纪7大数学难题,解决其中一个你就成为了百万富翁!

全世界只有3.14 % 的人关注了爆炸吧知识百万富翁你也可以昨天一大早&#xff0c;知识君就收到模友送的3枝红玫瑰。仔细一看&#xff0c;原来又是来跟知识君约稿的。。。知识君只能说&#xff1a;1900年&#xff0c;希尔伯特&#xff08;传送门&#xff09;在巴黎国际数学家代表…

在 Azure VM 上使用 Jitsi 搭建私人视频会议

点击上方蓝字 / 关注“汪宇杰博客”原文&#xff1a;Azure Tips And Tricks翻译&#xff1a;汪宇杰私人视频会议市面上有许多视频会议应用程序&#xff0c;例如 Zoom、Microsoft Teams 和 Skype。有时&#xff0c;您需要自己的服务&#xff0c;以让自己更安全并在自己的公司内部…

[LeetCode]119.Pascal#39;s Triangle II

题目 Given an index k, return the kth row of the Pascal’s triangle. For example, given k 3, Return [1,3,3,1]. Note: Could you optimize your algorithm to use only O(k) extra space? 思路 无 代码 /**------------------------------------* 日期&#xff1a…