技术开发 频道

如何防范SQL注入:测试篇

  存储过程注入

  在上一篇《如何防范SQL注入—编程篇》中,我们提到使用存储过程是能够防范SQL注入的,但同时也要注意,存储过程如果使用不得当,使用存储过程的动态查询事实上也会造成一定的SQL注入漏洞。

  以下面的SQL存储过程为例:

 Create procedure user_login @username varchar(20), @passwd varchar(20) As

  
Declare @sqlstring varchar(250)

  
Set @sqlstring =

  
Select 1 from users

  
Where username =+ @username +and passwd =+ @passwd

  
exec(@sqlstring)

  
Go

  用户的输入如下:

 anyusername or 1=1'

  anypassword

  如果我们没有对输入进行验证,那么上面的语句就回返回数据库中的一条记录。

  我们再看下面的一条: 

Create procedure get_report @columnamelist varchar(7900) As

  
Declare @sqlstring varchar(8000)

  
Set @sqlstring =

  
Select+ @columnamelist +from ReportTable‘

  
exec(@sqlstring)

  
Go

  如果用户输入是:

1 from users; update users set password = 'password'; select *

  后面则显而易见,用户的所有密码都被更改且得到了报表信息。

0
相关文章