当前位置:网站首页>.NET下IN关键字下多个并列参数的参数化
.NET下IN关键字下多个并列参数的参数化
2022-07-19 05:25:00 【醉酒的李白、】
前言,参数化可以防止SQL注入,,
当修改这种参数化漏洞很多时候都会遇到类似这样一段SQL,如下:
---and A.PersonnelNo in (" + perNoStr + ")
perNoStr是一个字符串拼接来的,值可能是
//["1001","1002","1003","1004"]
string perNoStr = "";
foreach (var item in data)
{
perNoStr = perNoStr + item.PersonnelNo + ',';
}
perNoStr = perNoStr.TrimEnd(',');
这种直接拼入到SQL语句的方式可以查出对应结果,但当改成参数化就会查不出数据,这里是由于一个参数不能把IN关键字里面的都给参数化了,而是要一一参数化。
解决方案,动态生成每一个参数:
List<SqlParameter> listParams = new List<SqlParameter>();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < data.Count; i++)
{
listParams.Add(new SqlParameter { ParameterName = "PersonnelNo" + i, Value = data[i].PersonnelNo });
builder.Append($"@PersonnelNo{i},");
}
if (data.Count > 0)
{
builder.Remove(builder.Length - 1, 1);
}
listParams.Add(new SqlParameter { ParameterName = "Period", Value = Period });
SQL那里直拼字符串,注意这里是直拼字符串而不是参数,所以不存在SQL Injection漏洞
A.PersonnelNo in (" + builder.ToString() + @")
参数builder长这样:
随便打开一个参数化的参数看一下:
每一个参数都被参数化了,这样就成功把IN关键字拼接SQL参数的漏洞修复好了
仅供学习参考,如有侵权联系我删除
边栏推荐
猜你喜欢
随机推荐
10day
Implementation of UART serial asynchronous communication with FPGA - transmission of single data
3DSlicer导入锥束CT图像
小白程序员第四天
Kubernetes技术与架构(四)
关于函数的一些小总结
Modelsim reported an error "instance of '* * * *' failed. the design unit was not found."
Impala-shell相关源码笔记
使用matlab使图片生成.mif文件
Use tasks and random functions to write excitation test files during FPGA simulation
14day
(2) Detailed examples of practical application of swagger
Understanding of blocking assignment and non blocking assignment in FPGA
GC tuning principle of JVM (12)
如何在Apache JIRA中搜索issue
Kubernetes technology and Architecture (I)
FPGA implementation of UART serial asynchronous communication - one byte data reception
FPGA之实现UART串行异步通信-单个数据的发送
题目:给出一组数组,按照从大到小得方式排列和从小到大。
JVM之GC调优原理(八)