WEB开发网
开发学院数据库MSSQL Server SQL 安全性: 新型 SQL 截断攻击和防御方法 阅读

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'
where username='admin' --' and password='dummy'
结果是,无需实际密码即可设置管理员帐户(或任何已知的帐户)的密码。在 T-SQL 函数中,您可以通过使用 REPLACE 或 QUOTENAME 函数修复此代码。图 4 显示了使用 REPLACE 函数后正确的代码。

SQL 安全性: 新型 SQL 截断攻击和防御方法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 会将参数中所有单引号的出现次数都增加一倍。因此,如果攻击者传递相同的参数,该语句会变为:

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:SQL 安全性 新型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接