SQL关于特殊字符处理的基本方法

SQL关于特殊字符处理的基本方法,第1张

SQL关于特殊字符处理的基本方法,第2张

一定要对用户可能输入的诸如引号,尖括号等特殊字符给予足够重视,它们可能引发严重的安全问题。SQL注入的基本手法之一,就是利用对单引号未加过滤的安全漏洞。

  用户的输入无非两个用途:对数据库操作或显示在页面上,下面分别对这两种情况下特殊字符的处理加以说明。

  1. 对数据库操作
  用户输入的数据用于对数据库进行操作时,又分为两种情况,一是进行写库操作,二是作为查询条件。

  1.1 写库操作
  (insert及update都视为写库操作,这果以insert为例说明,update的处理相同)
  一般采用insert语句或AddNew方法两种方式进行写库操作,我们先来看insert语句:

  DIM username,sqlstr
  username = trim(Request.Form("uname"))
  sqlstr = "insert into [userinfo] (username) values ('"& username &"')"

  以SQL Server为例,使用这种方式写库,如果username中含用单引号('),会出错。使用下面的自定义函数,可以将单引号进行转换:

  Rem 转换SQL非法字符
  function SQLEncode(fString)
  if isnull(fString) then
  SQLEncode = ""
  exit function
  end if
  SQLEncode=replace(fString,"'","''")
  end function

  以上函数将一个单引号转换为两个连续的单引号,数据库能够接受,并以一个单引号写入。SQL语句改为:

  sqlstr = "insert into [userinfo] (username) values ('"& SQLEncode(username) &"')"

  再来看AddNew方法:

  DIM username
  username = trim(Request.Form("uname"))
  'MyRst为Recordset对象,MyConn为Connection对象
  MyRst.open "[userinfo]",MyConn,0,3
  MyRst.AddNew
  MyRst("username").Value = username
  MyRst.Update
  MyRst.Close

  使用这种方式写库时,不必调用SQLEncode()对单引号进行转换,数据库会自行处理。

  对于存储过程的的参数,同样不必进行单引号的转换。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQL关于特殊字符处理的基本方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情