加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 域百科网 (https://www.yubaike.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

asp单引号 数据验证之特殊字符 处理

发布时间:2022-12-05 12:46:12 所属栏目:Asp教程 来源:
导读:  一定要对用户可能输入的诸如引号,尖括号等特殊字符给予足够重视,它们可能引发严重的安全问题。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()对单引号进行转换,数据库会自行处理。
 
  对于存储过程的的参数,同样不必进行单引号的转换。
 
  建议大家利用存储过程进行操作,好处嘛,我在《ASP与存储过程》一文中已做了阐述。否则,建议使用AddNew方法写库,好处不仅仅在于避免对单引号进行处理,本文对此不作深入探讨。
 
  1.2 用户输入做为查询条件
 
  如果用户输入的数据作为查询条件出现在where子句中,不论该where子句属于update语句、delete语句还是select语句,都要对单引号进行转换。
 
  2. 用户输入的数据作为输出,显示在页面上
 
  我们这里只讨论不允许用户使用HTML代码的情况,也就是说,即使用户输入了HTML代码,这些数据也不会以HTML代码的形式显示。至于允许用户使用HTML代码的情况,比较复杂,以后专文探讨。
 
  用户输入的数据是绝对不可以不加处理,原样显示的。如果其中包含HTML或js代码,使你的页面混乱不堪倒是小事,甚至可以格掉你的硬盘。
 
  输出显示在页面上的数据,有可能是用户的直接输入,或是取自数据库。可以看到以上在入库时的处理只是转换了单引号,对尖括号,双引号等特殊字符并未处理,我们放在输出的时候再进行处理。
 
  ASP中的server.HTMLEncode()方法可以将许多字符转换为“HTML字符”,如将等等。
 
  在数据显示在页面上之前,可以用server.HTMLEncode()对其进行转换。但是该方法不会对回车,空格进行转换,这样就造成以下问题:如果用户是通过textarea控件输入的数据,输出时将不会保留原有格式,不仅没有回车换行,多个空格也只会显示为一个。为了解决这个问题asp单引号,我们使用以下自定义函数:
 
  Rem 转换HTML非法字符,用于输出显示时
 
  function HTMLEncode(fString)
 
  if not isnull(fString) then
 
  fString = Replace(fString, ">", ">")
 
  fString = Replace(fString, "
 

(编辑:百客网 - 域百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章