Function ChkInvaildWord(Words)
Const InvaildWords="select|update|delete|insert|@|--|,|'|or" ''需要过滤得字符以“|”隔开,最后结束的字符必须是|
ChkInvaildWord=True
InvaildWord=Split(InvaildWords,"|")
inWords=LCase(Trim(Words))
For i=LBound(InvaildWord) To UBound(InvaildWord)
If Instr(inWords,InvaildWord(i))>0 Then
ChkInvaildWord=True
Exit Function
End If
Next
ChkInvaildWord=False
End Function
用JAVASCRIPT即可
str='过滤词1,过滤词2,过滤词3,过滤词4,过滤词5,过滤词6,过滤词7' //还可以加很多
function checkIt(txt){
aStr=str.split(',');
for(i=0;i<aStr.length;i++)
{
if(txt.indexOf(aStr[i]))!=-1)
{
alert('包含了过滤词:'+aStr[i]);
return false;
}
}
return true;
}
只需修改str,然后调用checkIt函数
s_sift是个字符串每个词用逗号相隔。
myword=request("liycontent")
bad_word = split(s_Sift,",")
for i = 0 to ubound(bad_word)
if instr(1,myword,bad_word(i)) <> 0 Then
CloseDatabase
response.write "<script>alert('错误:注册失败,申请内容中包含有非法用词!');history.go(-1);</script>"
response.end
end if
next
以下是实现get请求的注入的拦截
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('CN7U系统警告 :请不要在参数中包含非法字符尝试注入!');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('CN7U系统警告 :请不要在参数中包含非法字符尝试注入!');history.back(-1)</Script>"
Response.End
End If
Next
Next
End If
但是该代码将内容中包含有上述关键词的内容都拦截了,有什么办法只拦截与关键字完全匹配的,比如:
内容里包含有 land 的时候不会应为包含 and 而拦截。
另外,有什么办法将内容中含有关键字的自动替换成其他:比如,一段内容里包含了 count (单独做为一个字符出现,不是某单词中包含count)我就将count替换成[count]或者count1等非count字符。
以下是实现get请求的注入的拦截
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('CN7U系统警告 :请不要在参数中包含非法字符尝试注入!');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('CN7U系统警告 :请不要在参数中包含非法字符尝试注入!');history.back(-1)</Script>"
Response.End
End If
Next
Next
End If
但是该代码将内容中包含有上述关键词的内容都拦截了,有什么办法只拦截与关键字完全匹配的,比如:
内容里包含有 land 的时候不会应为包含 and 而拦截。
另外,有什么办法将内容中含有关键字的自动替换成其他:比如,一段内容里包含了 count (单独做为一个字符出现,不是某单词中包含count)我就将count替换成[count]或者count1等非count字符。