首页 > 编程知识 正文

格式化字符串漏洞,asp.net core 3.0

时间:2023-05-05 07:07:09 阅读:57458 作者:2854

开始前做一个大致的说明,IDOR的漏洞是什么? 嗯! 例如,一个角色下有n个用户,具有该角色的所有用户都具有自己创建的普通用户的操作权限。 例如,删除。 我们通常用表的主键操作这个记录。 这些功能包括两个接口:查询列表和删除指定用户。

嗯! 当然,查询列表接口具有与用户相关联的主键(通过删除接口传递ID ),聪明人应该想到,ID是明文的,主键一般是自生长的,通过推测该参数,会产生恶意嗯! 此时,可能有人会考虑一些解决办法。

可以通过加密和签名参数进行处理。 嗯! 但是,似乎不太适合前端。 因为JS等是给别人的,所以也在谈论密钥和加密方式。

JS处理不行。 我的服务端可以验证数据操作吧。 嗯! 确实可以。 前台ID后台在一系列操作前进行身份信息条件的筛选。 (deletetablenamewhereuserid={ id } and create _ id={ log in _ userid } )就是这样的意思。 每次带着这样的信息,总会有什么地方不好吧? 万一团队开发中有人忘记了叻,那就有意思了。 (请随意删除我们的用户数据,好好享受。 请参阅。 这个方法很好,但是有点蛋疼。

这个问题的原因不是因为ID是数字的自我增加吗? 我不仅仅需要使主键不规则。 例如,在时间戳中输入随机数,然后例如GUID。 猜猜看吗? 请慢慢分配一下。 但是,这涉及到一些小问题、性能和存储空间问题。 (自生长主键和GUID查询性能和占用空间的比较)

三像解决方案那样,扔在前台的主键不规则,似乎不容易列举就可以了。 这里是对称加密(百度“对称加密有什么”)。

关于第四个记录,我会让你找不到接下来回家的路。 正如微软官方文档中已经介绍的那样,https://docs.Microsoft.com/zh-cn/aspnet/core/security/data-protection/using 关于如何整合到程序中,八仙越过大海分别展示了神通。 下面贴上我的神通。

我在用微软拥有的序列化组件。 关于Newtonsoft.Json,只是API不同,逻辑相同。 串行管理组件代码:

复制代码

publicclassprotectionconverter : JSON converter

{

privatereadonlyitimelimiteddataprotector _ protector;

公共保护转换器(

{

//因为在这里做了简单的划分,所以看了官方文件当然也不会犹豫。

_ protector=utility.usedataprotectionproviderutility.getttimelimiteddataprotector (;

}

publicoverridelongread (ref utf8 jsonreaderreader,Type type,JsonSerializerOptions options ) )。

{

string val=reader.GetString (;

if(string.isnullorempty(val ) )

返回0;

return long.parse (_ protector.unprotect ) ) val );

}

publicoverridevoidwrite (utf8 jsonwriterwriter,long value,jsonserializeroptionsoptions ({ stringstr=null; if (值!=0) { var nowDate=DateTime.Now; str=_ protector.protect (value.tostring ),nowdate.date.addhours(26 )- nowDate ); }writer.writestringvalue(str; }使用方法:

[ JSON转换器(类型of )保护转换器]

公共长id { get; set; }

复制代码

使用序列化组件的特性进行解决。 不明白的时候考虑JsonConvert

Newtonsoft.Json方式代码:

复制代码

///JSON.NET

//publicclassprotectionconverter : JSON converter

//{

//privatereadonlyitimelimiteddataprotector _ protector;

//公共保护转换器(

//{

//_ protector=commonessheleper.usedataprotectionproviderheleper.gettimelimiteddataprotector (;

//}

//publicoverrideboolcanconvert (类型对象类型) )。

//{

//返回真;

//}

//publicoverrideobjectreadjson (jsonreaderreader,Type objectType,object existingValue, JSON序列化程序序列化程序)///publicoverridevoidwritejson (jsonwriterwriter,object value, JsonSerializer serializer )//var nowdate=datate//writer.writevalue (_ protector.protect ) value.tostring,)

在此,您将向对象(开机自检较多)提交数据并对其进行解密。 如果不是表单,该如何提交对象?

string key1=request.query [“key 1”] ]; 获取//URL字符串

string key2=request.form [“key 2”] ]; //获取表单

上码可以放在自定义管道或自定义过滤器中。

有同样兴趣爱好的人可以一起进入讨论哦。 企鹅群编号: 1046795523

学习视频资料: http://www.makeru.com.cn/live/1392 _ 1164.html? s=143793

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。