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

SQL 安全性: 新型 SQL 截断攻击和防御方法

 2009-02-10 10:23:52 来源:WEB开发网   
核心提示: T-SQL 函数可以看出,处理标识符和字符串的规则相对比较简单,SQL 安全性: 新型 SQL 截断攻击和防御方法(3),如果您预先知道该字符串,可以手动对其进行分隔,因此,即使有人传递的是 @loginname = 'my[]dbreader' 和 @passwd = &

T-SQL 函数

可以看出,处理标识符和字符串的规则相对比较简单,如果您预先知道该字符串,可以手动对其进行分隔。但如果您要根据用户输入构建动态的 T-SQL 语句,该怎么办?您需要通过自动的方法来完成。两种 T-SQL 函数可帮您准备分隔字符串,它们是 QUOTENAME 和 REPLACE。

QUOTENAME 会返回一个 Unicode 字符串,并添加了分隔符,以使该输入字符串成为有效标识符。QUOTENAME 函数使用以下语法:

QUOTENAME ( 'string' [ , 'delimiter' ] )您可以将要分隔的字符串和一个用作分隔符的单字符字符串传给 QUOTENAME。分隔符可以是方括号、单引号或双引号。

此函数主要用于准备分隔 SQL 标识符,因此它只接受 sysname 类型,在 SQL Server 中为 nvarchar(128)。您还可以使用此函数准备分隔 SQL 字符串,但由于参数长度的限制,因此它支持的字符串长度最多为 128 个字符(在这一点上,REPLACE 函数可发挥其用途)。图 1 显示了 sp_addlogin 如何使用 QUOTENAME 来准备分隔登录名和密码字符串。可以看出,由于 @loginname 和 @passwd 均为 sysname 类型,因此可使用 QUOTENAME 函数准备分隔 SQL 标识符和分隔字符串。因此,即使有人传递的是 @loginname = 'my[]dbreader' 和 @passwd = 'P@$$''w0rd',也不会有任何 SQL 注入机会,因为 QUOTENAME 对分隔字符进行了适当转义:

create login [my[]]dbreader] with password = 'P@$$''w0rd'

SQL 安全性: 新型 SQL 截断攻击和防御方法Figure1Delimiting Strings with QUOTENAME

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

Tags:SQL 安全性 新型

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