存储过程注入
在上一篇《如何防范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 * |
后面则显而易见,用户的所有密码都被更改且得到了报表信息。
版权声明:本文出自jamesking的51Testing软件测试博客:http://www.51testing.com/?107144
原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。
推荐阅读: