SQL 安全性: 新型 SQL 截断攻击和防御方法
2009-02-10 10:23:52 来源:WEB开发网核心提示: update Users set password='NewP@ssw0rd'where username='admin' --' and password='dummy'结果是,无需实际密码即可设置管理员帐户(或任何已知的帐户)的密
update Users set password='NewP@ssw0rd'
结果是,无需实际密码即可设置管理员帐户(或任何已知的帐户)的密码。在 T-SQL 函数中,您可以通过使用 REPLACE 或 QUOTENAME 函数修复此代码。图 4 显示了使用 REPLACE 函数后正确的代码。
where username='admin' --' and password='dummy'
Figure4Using REPLACE to Avoid Injection
CREATE PROCEDURE sp_setPassword
@username varchar(25),
@old varchar(25),
@new varchar(25)
AS
-- Declare variables.
DECLARE @command varchar(100)
-- Construct the dynamic SQL
SET @command=
‘update Users set password=‘‘‘ + REPLACE(@new, ‘‘‘‘, ‘‘‘‘‘‘) + ‘‘‘‘ +
‘ where username=‘‘‘ + REPLACE(@username, ‘‘‘‘, ‘‘‘‘‘‘) + ‘‘‘‘ +
‘ AND password = ‘‘‘ + REPLACE(@old, ‘‘‘‘, ‘‘‘‘‘‘) + ‘‘‘‘
-- Execute the command.
EXEC (@command)
GO
可以看出,REPLACE 会将参数中所有单引号的出现次数都增加一倍。因此,如果攻击者传递相同的参数,该语句会变为:
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接