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

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

 2009-02-10 10:23:52 来源:WEB开发网   
核心提示: create procedure sys.sp_addlogin@loginame sysname ,@passwd sysname = Null ,@defdbsysname = ‘master’ ,@deflanguagesysname = Null ,@sid

create procedure sys.sp_addlogin
  @loginame    sysname
  ,@passwd     sysname = Null
  ,@defdb     sysname = ‘master’   
  ,@deflanguage  sysname = Null
  ,@sid      varbinary(16) = Null
  ,@encryptopt   varchar(20) = Null
AS
  -- SETUP RUNTIME OPTIONS / DECLARE VARIABLES --
  -- some code ----
  set @exec_stmt = ‘create login ‘ + quotename(@loginame, ‘[‘)
  if @passwd is null
    select @passwd = ‘‘
  if (@encryptopt is null)
    set @exec_stmt = @exec_stmt + ‘ with password = ‘ +
      quotename(@passwd, ‘‘‘‘)
  else
  -- some code
GO

REPLACE 函数会将某个给定字符串的所有出现之处全部替换为指定的替代字符串。与 QUOTENAME 不同,REPLACE 函数对其接受的参数没有长度限制:

REPLACE ( 'string1' , 'string2' , 'string3' )

REPLACE 带有三个字符串:string1 是要编辑的表达式,string2 是 string1 中要被替换的项,string3 是用于取代 string2 的项。任何字符串表达式都可由字符或二进制数据组成。

要准备分隔 SQL 字符串,您可以使用 REPLACE 使单引号的出现次数增加一倍,但您需要手动添加分隔符(开始和结束的单引号)。图 2 显示了 sp_attach_single_file_db 如何使用此函数准备一个文件的已转义的物理名称。由于 @physname 是 nvarchar(260),因此您无法使用 QUOTENAME 准备分隔字符串,这就是为何要使用 REPLACE 的原因。因此,即使有人传递带单引号的字符串,他们也无法打破 SQL 语句,注入任何 SQL 代码。

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

Tags:SQL 安全性 新型

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