SQL 安全性: 新型 SQL 截断攻击和防御方法
2009-02-10 10:23:52 来源:WEB开发网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 代码。
- ››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表' (数...
更多精彩
赞助商链接