过滤字符

本文介绍了一种SQL注入攻击的防护方法,并讨论了如何精确地过滤敏感关键词,避免误拦截,同时提供了替换敏感词的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值