mysql的分页查询传参数_(记录)mysql分页查询,参数化过程的坑

本文介绍了在处理存在SQL注入风险的分页查询时,如何将原本的非参数化SQL改造成参数化查询。文章详细阐述了两种尝试思路:一是通过存储过程传递参数,但因无法动态定义参数而放弃;二是直接在代码中拼接分页SQL,解决了LIMIT子句计算及LIKE模糊查询的问题,利用CONCAT()函数处理模糊查询。尽管性能受到影响,但成功实现了参数化,提高了安全性。
摘要由CSDN通过智能技术生成

在最近的工作中,由于历史遗留,一个分页查询没有参数化,被查出来有sql注入危险,所以对这个查询进行了参数化修改。

一看不知道,看了吓一跳,可能由于种种原因,分页查询sql是在存储过程中拼接出来的,where之后的条件也是在代码中先进行拼接,然后作为整体参数在传入存储过程里,在存入过程里又进行一次拼接。这样的话就有sql注入的潜在危险,尽管在拼接where之前进行的查询条件的验证。

大家都明白,参数化是防止sql注入的有效方法,然后就对这个分页查询进行大刀阔斧的改革。

思路一:1、对原先的代码中拼接的where条件,不进行直接的赋值拼接。而是拼接成带@符号的参数。并且给参数赋值;例如:

if (Num > 0)

{

sbWhere.Append("AND s.SysNo=").Append(Num.Value);

}

改if (Num > 0)

{

sbWhere.Append("AND s.SysNo = @SysNo");

paras.Add(new MySqlParameter("@SysNo", Num.Value));

}

2、给存储过程添加参数

3、用SetParameters(paras.ToArray())方法直接把参数paras传给存储过程

结论:根本走不通,因为我们的查询条件是动态拼接的,没办法动态给存储过程定义传入参数,这个思路直接给pass掉了;

小结ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值