当前位置:   article > 正文

正则表达式防止SQL注入_防sql注入正则表达式

防sql注入正则表达式


本来对正则表达式不是很了解,但由于项目需要,项目主要没有采用存储过程方式来存储 SQL语句,所以很有可能被黑客用SQL注入攻击,现在就在网上找了找解决办法,在业务层来过滤SQL语句,防止SQL注入攻击,主要是采用了正则表达式,因为正则表达式对字符串的操作是很强大的.

首先用一个Validate()类来封装正则表达式和相关操作:

    //验证是否有SQL注入字符
    private bool ValidateQuery(Hashtable queryConditions)
    {
    //构造SQL的注入关键字符
    #region 字符
    string[] strBadChar = {"and"
    ,"exec"
    ,"insert"
    ,"select"
    ,"delete"
    ,"update"
    ,"count"
    ,"or"
    //,"*"
    ,"%"
    ,":"
    ,"/'"
    ,"/""
    ,"chr"
    ,"mid"
    ,"master"
    ,"truncate"
    ,"char"
    ,"declare"
    ,"SiteName"
    ,"net user"
    ,"xp_cmdshell"
    ,"/add"
    ,"exec master.dbo.xp_cmdshell"
    ,"net localgroup administrators"};
    #endregion

    //构造正则表达式
    string str_Regex = ".*("
    for (int i = 0; i < strBadChar.Length - 1; i++)
    {
    str_Regex += strBadChar[i] + "|"
    }
    str_Regex += strBadChar[strBadChar.Length - 1] + ").*"
    //避免查询条件中_list情况
    foreach (string str in queryConditions.Keys)
    {
    if(str.Substring(str.Length - 5)=="_list")
    {
    //去掉单引号检验
    str_Regex = str_Regex.Replace("|'|", "|");
    }
    string tempStr = queryConditions[str].ToString();
    if (Regex.Matches(tempStr.ToString(), str_Regex).Count > 0)
    {
    //有SQL注入字符
    return true;
    }
    }
    return false;
    }

queryConditions 是一个hashtable,用于传入查询条件,hashtable中的键值(key)为:@name,相对应SQL中的参数,那Value则对应为参数的实际值了.

正则表达式的应用主要是按这样的规律来过滤字符串的:

.*(and|exec|select|update|or|'|''|).*   //  str_Regex

核心函数主要是: Regex.Matches(tempStr.ToString(), str_Regex).

要是在 tempStr 字符串中含有非法字符, 则函数的Count值将大于0

好了,就这样就可以判断是否含有SQL注入攻击字符了.
 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/131101
推荐阅读
相关标签
  

闽ICP备14008679号