一定要对用户可能输入的诸如引号,尖括号等特殊字符给予足够重视,它们可能引发严重的安全问题。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"))