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

被折叠的 条评论
为什么被折叠?



