如何防范SQL注入——测试篇

发表于:2009-12-23 11:47

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:jamesking    来源:51Testing软件测试博客

  存储过程注入

  在上一篇《如何防范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

原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。

推荐阅读:

如何防范SQL注入——编程篇

SQL注入安全威胁

Web安全性测试—SQL注入

六个建议防止SQL注入式攻击

SQL注入攻击的种类和防范手段

44/4<1234
《2023软件测试行业现状调查报告》独家发布~

精彩评论

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号