Injection Attack 注入式攻击

本文讨论了如何避免SQL注入攻击,特别是在存储过程中的参数使用。通过对比两种不同的参数处理方式,强调了直接拼接参数可能带来的安全隐患,并提出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是在sql的参数中加入 ';' 实现的. 因为 ';' 在sql里表示一个新命令的开始.

 比如有这样一个sp

procedure sp1
  @p1 CHAR(50)
as
  exec('select * from tab1 where ' + @p1)
go

设计者想的是转入像
  name='testName'
  name='testName' and age=15
这样的参数,但hacker们会转入这样的参数
 ;delete from tab1 (如果他知道你的表名)
 ;shutdown (关闭server)
 ;xp_*(sql server内置的一些sp,可对server进行任何操作)

所以写sp时,最好能写成

procedure sp2
 @p2 CHAR(50)
as
  select * from tab1 where name=@p2
go

但,如果where-clause后的条件不定的话,也只能用第一种方法了. 这时一定要记得对参数进行检查, 最好是在front-end时行检查,以减轻server的负担

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值