您的位置:首页 >> Web开发 >> ASP技术 >> ASP教程 >> 正文
ASP教程 RSS
 

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

http://www.rdxx.com 08年04月19日 08:06 我要投稿

关键词: 特殊字符 , 基本 , 方法 , SQL , 字符

  一定要对用户可能输入的诸如引号,尖括号等特殊字符给予足够重视,它们可能引发严重的安全问题。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()对单引号进行转换,数据库会自行处理。

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


 
 
标签: 特殊字符 , 基本 , 方法 , SQL , 字符 打印本文
 
 
  热点搜索
 
 
 


Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站