博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
防SQL注入 记
阅读量:6872 次
发布时间:2019-06-26

本文共 1712 字,大约阅读时间需要 5 分钟。

/// < summary> 

        /// 分析用户请求是否正常 

        /// < /summary> 

        /// < param name="Str">传入用户提交数据< /param> 

        /// < returns>返回是否含有SQL注入式攻击代码< /returns> 

        private static bool ProcessSqlStr(string Str,int type) 

        { 

            string SqlStr; 

 

            if(type == 1) 

                SqlStr = "exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare "; 

            else

                SqlStr = "'|and|exec|insert|select|delete|update|count|*|chr|mid|master|truncate|char|declare"; 

 

            bool ReturnValue = true; 

            try

            { 

                if (Str != "") 

                { 

                    string[] anySqlStr = SqlStr.Split('|'); 

                    foreach (string ss in anySqlStr) 

                    { 

                        if (Str.IndexOf(ss)>=0) 

                        { 

                            ReturnValue = false; 

                        } 

                    } 

                }  

            } 

            catch

            { 

                ReturnValue = false; 

            } 

            return ReturnValue; 

        } 

 

 

 

//Sql注入时,可能出现的特殊符号,,可根据自己的实际情况进行初始化,每个符号由'|'分隔开来

//private const string StrRegex = @"-|;|,|/|(|)|[|]|}|{|%|@|*|!|'";

private const string StrRegex = @"=|!|'";

//Sql注入时,可能出现的sql关键字,可根据自己的实际情况进行初始化,每个关键字由'|'分隔开来

private const string StrKeyWord = @"select|insert|delete|from|drop table|update|truncate|exec master|netlocalgroup administrators|:|net user|or|and";

 

/// <summary>

  /// 检查_sword是否包涵SQL关键字
  /// </summary>
  /// <param name="_sWord">需要检查的字符串</param>
  /// <returns>存在SQL注入关键字时返回 true,否则返回 false</returns>
  public bool CheckKeyWord(string _sWord)
  {
  bool result = false;
  //模式1 : 对应Sql注入的可能关键字
  string[] patten1 = StrKeyWord.Split('|');
  //模式2 : 对应Sql注入的可能特殊符号
  string[] patten2 = StrRegex.Split('|');
  //开始检查 模式1:Sql注入的可能关键字 的注入情况
  foreach (string sqlKey in patten1)
  {
    if (_sWord.IndexOf(" " + sqlKey) >= 0 || _sWord.IndexOf(sqlKey + " ") >= 0)
    {
    //只要存在一个可能出现Sql注入的参数,则直接退出
    result = true;
    break;
    }
  }
  //开始检查 模式1:Sql注入的可能特殊符号 的注入情况
  foreach (string sqlKey in patten2)
  {
    if (_sWord.IndexOf(sqlKey) >= 0)
    {
    //只要存在一个可能出现Sql注入的参数,则直接退出
    result = true;
    break;
    }
  }
  return result;
  }

转载地址:http://pfpfl.baihongyu.com/

你可能感兴趣的文章
又见尾递归
查看>>
安装PyGraphics
查看>>
【COCOS2DX-LUA 脚本开发之四】使用TOLUA++编译PKG,从而创建自定义类让LUA脚本使用...
查看>>
开源大数据周刊-第16期
查看>>
遥感图像分类现状及存在的问题
查看>>
Commons Logging存在的ClassLoader问题详解
查看>>
双向链表的操作
查看>>
Flume-ng 高级功能配置
查看>>
我的友情链接
查看>>
CRM技术发展历程
查看>>
编译安装LAMP(php-fpm)步骤详解
查看>>
2-Ceph运维
查看>>
深入浅出Linux设备驱动编程--定时器
查看>>
常见移动设备的 CSS3 Media Query 整理(iPhone/iPad/Galaxy/HTC
查看>>
java递归-迷宫求解
查看>>
springboot加载顺序
查看>>
python chapter 学习之序列
查看>>
GlusterFS的基础应用
查看>>
ORA-09925: Unable to create audit trail file Linux-x86_64
查看>>
如何跳出嵌套语句之return
查看>>