扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:gaoyuanan 来源:赛迪网技术社区 2007年9月7日
关键字: 注入 SQL Server SQL Server 各版本 数据库
当username为admin''—时,查询语句为:update users set password = ''password'' where username=''admin''—'' 这样攻击者可以通过注册一个admin''—的用户来根据自己的想法来设置admin的密码。 这是一个非常严重的问题,目前在大型的应用程序中试图去过滤数据。最好的解决方法是拒绝非法输入,这胜于简单地努力去修改它。这有时会导致一个问题,非法的字符在那里是必要的,例如在用户名中包含''符号,例如 O''Brien 从一个安全的观点来看,最好的解答是但引号不允许存在是一个简单的事实。如果这是无法接受的话,他们仍然要被过滤;在这种情况下,保证所有进入SQL查询的数据都是正确的是最好的方法。
如果攻击者不使用任何应用程序莫名其妙地往系统中插入数据,这种方式的攻击也是可能的。应用程序可能有email接口,或者可能在数据库中可以存储错误日志,这样攻击者可以努力控制它。验证所有数据,包括数据库中已经存在的数据始终是个好的方法。确认函数将被简单地调用,例如:
|
或者类似的方法。
[长度限制]
为了给攻击者更多的困难,有时输入数据的长度是被限制的。当这个阻碍了攻击时,一个小的SQL可以造成很严重的危害。例如:
Username:'';shutdown—
这样只用12个输入字符就将停止SQL SERVER实例。另一个例子是:
drop table <tablename>
如果限定长度是在过滤字符串后应用将会引发另一个问题。假设用户名被限定16个字符,密码也被限定16个字符,那么下面的用户名和密码结合将会执行上面提到的shutdown命令:
|
原因是应用程序尝试去过滤用户名最后的单引号,但是字符串被切断成16个字符,删除了过滤后的一个单引号。这样的结果就是如果密码字段以单引号开始,它可以包含一些SQL语句。既然这样查询看上去是:
|
实际上,查询中的用户名已经变为:
aaaaaaaaaaaaaaa'' and password=''
因此最后的SQL语句会被执行。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者