以文本方式查看主题

-  智睿软件_技术交流论坛  (http://zhirui.net/bbs/index.asp)
--  Web程序开发  (http://zhirui.net/bbs/list.asp?boardid=22)
----  高效的防SQL注入函数  (http://zhirui.net/bbs/dispbbs.asp?boardid=22&id=8)

--  作者:zhirui
--  发布时间:2009-10-26 20:44:16
--  高效的防SQL注入函数
FUNCTION CHECKSTR(ISTR)
DIM ISTR_FORM,SQL_KILL,SQL_KILL_1,SQL_KILL_2,ISTR_KILL
IF ISTR="" THEN EXIT FUNCTION
ISTR=LCase(ISTR)
ISTR_FORM=ISTR
SQL_KILL="\'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|set|;|from|="
SQL_KILL_1=SPLIT(SQL_KILL,"|")
FOR EACH SQL_KILL_2 IN SQL_KILL_1
ISTR=REPLACE(ISTR,SQL_KILL_2,"")
NEXT
CHECKSTR=ISTR
ISTR_KILL=REPLACE(ISTR_FORM,ISTR,"")
IF ISTR<>ISTR_FORM THEN
RESPONSE.WRITE ""
RESPONSE.END
END IF
END FUNCTION
调用方法:

key=CHECKSTR(request.form("key"))

--  作者:zhirui
--  发布时间:2009-07-14 11:24:37
--  
具体代码如下 dim sql_injdata sql_injdata = "\'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" sql_inj = split(sql_injdata,"|") if request.querystring<>"" then for each sql_get in request.querystring for sql_data=0 to ubound(sql_inj) if instr(request.querystring(sql_get),sql_inj(sql_data))>0 then response.write "" response.end end if next next end if 这样我们就实现了get请求的注入的拦截,但是我们还要过滤post请求,所以我们还得继续考虑request.form,这个也是以数组形式存在的,,我们只需要再进一次循环判断即可。代码如下 if request.form<>"" then for each sql_post in request.form for sql_data=0 to ubound(sql_inj) if instr(request.form(sql_post),sql_inj(sql_data))>0 then response.write "