注册 登录
编程论坛 ASP技术论坛

大家看一下顺便解释一下!

孤独冷雨 发布于 2007-09-21 00:12, 460 次点击
Function CheckSql() '防止SQL注入
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 "<Script Language='javascript'>{alert('请不要在参数中包含非法字符!');history.back(-1)}</Script>"
Response.end
end if
next
Next
End If
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 "<Script Language='javascript'>{alert('请不要在参数中包含非法字符!');history.back(-1)} </Script>"
Response.end
end if
next
next
end if
End Function


我把这段防注放代码保存在(abc.asp页面里)加入后台调用,在后台提交新闻时,老是报错,我把这个调用去掉后又行了,但在前台用于新闻内容显示时可以用。是怎么回事了?

[此贴子已经被作者于2007-9-21 0:16:21编辑过]

8 回复
#2
yms1232007-09-21 11:23

这个函数在从客户端提交Sql语句时就会拦截Sql语句,楼主报的什么错误?

#3
hmhz2007-09-21 11:32

你提交的新闻标题或者内容里有包含
"'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
这些被拦截的防注入单词或符号

所以你去掉防注入就可以了,为了安全那就不要去掉,但提交内容有时候会被拦截
那就得把你提交的内容进行过滤就没事了

#4
孤独冷雨2007-09-21 15:04

我在向数据库加内容时,他提示!rs("uname")=trim(request("uname")) 这半个小括号是非法字符!可根本不是啊!

#5
孤独冷雨2007-09-21 15:06

三楼的能详细说一下,怎么过虑吗?

#6
hmhz2007-09-21 15:31

过滤使用替换的方式
比如符号单引号 “'”可以使用编码 &#39; 来代替
例如 uname=replace(request("uname"),"'","&#39;")

#7
孤独冷雨2007-09-21 15:46

是用你用的这样的做的,可还是不行!

#8
hmhz2007-09-21 15:52

过滤里面有这么多 "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
我只说了一种,你只用我一种的怎么行呢

#9
孤独冷雨2007-09-21 16:06
replace(replace(replace(replace(Rtrim(request.Form("news_content")),"<","&lt;"),">","&gt;"),"'","&#39;"),"“","&quot;")
能把你的QQ留一下吗?我想向你好好请教一下!我的QQ:121355385
1