扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:aspcool 来源:aspcool 2007年9月15日
关键字: 注入 SQL Server SQL Server 各版本 数据库
例如,攻击者可能利用下面的信息在应用程序中注册:
Username:admin''—
Password:password
应用程序正确过滤了单引号,返回了一个类似这样的insert语句:
insert into users values(123,''admin''''—'',''password'',0xffff)
我们假设应用程序允许用户修改自己的密码。这个ASP脚本程序首先保证用户设置新密码前拥有正确的旧密码。代码如下:
username = escape( Request.form("username") );
oldpassword = escape( Request.form("oldpassword") );
newpassword = escape( Request.form("newpassword") );
var rso = Server.CreateObject("ADODB.Recordset");
var sql = "select * from users where username = ''" + username + "'' and password = ''" + oldpassword + "''";
rso.open( sql, cn );
if (rso.EOF)
{
…
设置新密码的代码如下:
sql = "update users set password = ''" + newpassword + "'' where username = ''" + rso("username") + "''"
rso("username")为登陆查询中返回的用户名
当username为admin''—时,查询语句为:
update users set password = ''password'' where username=''admin''—''
这样攻击者可以通过注册一个admin''—的用户来根据自己的想法来设置admin的密码。
这是一个非常严重的问题,目前在大型的应用程序中试图去过滤数据。最好的解决方法是拒绝非法输入,这胜于简单地努力去修改它。这有时会导致一个问题,非法的字符在那里是必要的,例如在用户名中包含''符号,例如
O''Brien
从一个安全的观点来看,最好的解答是但引号不允许存在是一个简单的事实。如果这是无法接受的话,他们仍然要被过滤;在这种情况下,保证所有进入SQL查询的数据都是正确的是最好的方法。
如果攻击者不使用任何应用程序莫名其妙地往系统中插入数据,这种方式的攻击也是可能的。应用程序可能有email接口,或者可能在数据库中可以存储错误日志,这样攻击者可以努力控制它。验证所有数据,包括数据库中已经存在的数据始终是个好的方法。确认函数将被简单地调用,例如:
if(not isValid("email",request.querystring("email"))) then
response.end
或者类似的方法。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者