public class SqlInject:Page{//检测到注入后的处理方式: 0:仅警告;1:警告+记录;2:警告+自定义错误页面;3:警告+记录+自定义错误页面  private const int _type = 0;private const string errRedirectPage = "/err.aspx";//如果记录注入信息,那么请设置:errMDBpath:数据库路径  private const string errMDBpath = "/SqlInject.mdb";//过滤特征字符  //过滤特征字符  private static string StrKeyWord = ConfigurationManager.AppSettings["SqlKeyWord"]; //@"select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec|master|net local group administrators|net user|or|and";  private static string StrRegex = ConfigurationManager.AppSettings["SqlRegex"];  //@";|/|(|)|[|]|{|}|%|@|*|'|!"; // 原始过滤条件:【-|;|,|/|(|)|[|]|{|}|%|@|*|'|!】  private HttpRequest request;public SqlInject(System.Web.HttpRequest _request){this.request = _request;}///<summary>  ///检测SQL注入及记录、显示出错信息  ///</summary>  public void CheckSqlInject(){bool isInject = false;if (CheckRequestQuery() || CheckRequestForm()){isInject = true;}else{return;}switch (_type){case 0:ShowErr();break;case 1:ShowErr();SaveToMdb();break;case 2:ShowErr();string temp;System.Web.HttpContext.Current.Response.Write("<script>setTimeout(\"" + "location.href='" + errRedirectPage + "'" + "\",5000)</script>");break;case 3:ShowErr();SaveToMdb();System.Web.HttpContext.Current.Response.Write("<script>setTimeout(\"" + "location.href='" + errRedirectPage + "'" + "\",5000)</script>");break;default:break;}System.Web.HttpContext.Current.Response.End();}private void SaveToMdb(){OleDbConnection conn = new OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + Server.MapPath(errMDBpath));conn.Open();OleDbCommand cmd = conn.CreateCommand();cmd.CommandText = "insert into [Record] (sIP,sDate,sPath) values ('" +request.ServerVariables["REMOTE_ADDR"].ToString() + "','" +DateTime.Now + "','" + request.ServerVariables["URL"].ToLower() + RelaceSingleQuotes(request.QueryString.ToString()) + "')";int code = cmd.ExecuteNonQuery();if (code == 1)HttpContext.Current.Response.Write("<br>****以上信息已记录至日志数据库****");elseHttpContext.Current.Response.Write("<br>日志数据库出错");conn.Close();}private string RelaceSingleQuotes(string _url){string URL = _url.Replace("'", "单引号");return URL;}private void ShowErr(){//string msg = @"<font color=red>请不要尝试未授权之入侵检测!</font>" + @"<br><br>";  //msg += @"操作IP:" + request.ServerVariables["REMOTE_ADDR"] + @"<br>";  //msg += @"操作时间:" + DateTime.Now + @"<br>";  //msg += @"页面:" + request.ServerVariables["URL"].ToLower() + request.QueryString.ToString() + @"<br>";  //msg += @"<a href='#' οnclick='javascript:window.close()'>关闭</a>";  //System.Web.HttpContext.Current.Response.Clear();  //System.Web.HttpContext.Current.Response.Write(msg);  HttpContext.Current.Response.Write("<script>alert('请不要尝试未授权之入侵检测!');javascript:history.go(-1);</script>");}///<summary>  /// 特征字符  ///</summary>  public static string KeyWord{get{return StrKeyWord;}}///<summary>  /// 特征符号  ///</summary>  public static string RegexString{get{return StrRegex;}}///<summary>  ///检查字符串中是否包含Sql注入关键字  /// <param name="_key">被检查的字符串</param>  /// <returns>如果包含注入true;否则返回false</returns>  ///</summary>  private static bool CheckKeyWord(string _key){string[] pattenString = StrKeyWord.Split('|');string[] pattenRegex = StrRegex.Split('|');foreach (string sqlParam in pattenString){if (_key.Contains(sqlParam + " ") || _key.Contains(" " + sqlParam)){return true;}}foreach (string sqlParam in pattenRegex){if (_key.Contains(sqlParam)){return true;}}return false;}///<summary>  ///检查URL中是否包含Sql注入  /// <param name="_request">当前HttpRequest对象</param>  /// <returns>如果包含注入true;否则返回false</returns>  ///</summary>  public bool CheckRequestQuery(){if (request.QueryString.Count > 0){foreach (string sqlParam in this.request.QueryString){if (sqlParam == "__VIEWSTATE") continue;if (sqlParam == "__EVENTVALIDATION") continue;if (CheckKeyWord(request.QueryString[sqlParam].ToLower())){return true;}}}return false;}///<summary>  ///检查提交的表单中是否包含Sql注入  /// <param name="_request">当前HttpRequest对象</param>  /// <returns>如果包含注入true;否则返回false</returns>  ///</summary>  public bool CheckRequestForm(){if (request.Form.Count > 0){foreach (string sqlParam in this.request.Form){if (sqlParam == "__VIEWSTATE") continue;if (sqlParam == "__EVENTVALIDATION") continue;if (CheckKeyWord(request.Form[sqlParam])){return true;}}}return false;}  }
}

View Code

在web编程中都有被sql注入的风险,要防止sql注入,最基本就是从编写代码的时候开始防护

在web.config中加入

 <appSettings><add key="SqlKeyWord" value="select|insert|delete|from|count(|drop table|update|truncate|asc(|mid(|char(|xp_cmdshell|exec|master|net local group administrators|net user|or|and"/><add key="SqlRegex" value=";|(|)|[|]|{|}|%|@|*|'|!"/></appSettings>

然后在Global文件中加入

void Application_BeginRequest(object sender, EventArgs e){//防SQL注入代码   SqlInject myCheck = new SqlInject(this.Request);myCheck.CheckSqlInject();  }

对于软件方面的防护,微软官方给了一个UrlScan的工具

urlScanx86

urlScanx64

安装完软件后要重启一下iis才能生效

转载自 http://netsecurity.51cto.com/art/201301/375797_1.htm

转载于:https://www.cnblogs.com/ZJ199012/p/3925162.html

web 中防止sql注入相关推荐

  1. Python全栈(五)Web安全攻防之7.MySQL注入读写文件和HTTP头中的SQL注入

    文章目录 一.MySQL注入读写文件 1.搭建新的测试环境(靶场) 2.读写文件概述 3.读取文件 4.写入文件 二.HTTP头中的SQL注入 1.HTTP头中的SQL注入介绍 updatexml函数 ...

  2. Java应用程序中的SQL注入

    在本文中,我们将讨论什么是SQL注入攻击. 以及它如何影响任何Web应用程序使用后端数据库. 在这里,我专注于Java Web应用程序. 开放Web应用程序安全项目(OWAP)列出了SQL注入是Web ...

  3. web安全学习-sql注入-针对mysql的攻击

    文章目录 1. 前言 补充:读取客户端本地文件到服务端mysql数据库 补充:利用全局日志写shell 补充:修改mysql的root密码 补充:配置远程登录 补充:低权限下读文件 补充:高版本mys ...

  4. 关于web安全之sql注入攻击

    前言:①这个晨讲我构思了两个星期,但是之前电脑坏了,一直拖到昨天才开始着手准备,时间仓促, 能力有限,不到之处请大家批评指正: ②我尽量将文中涉及的各种技术原理,专业术语讲的更加通俗易懂,但这个前提是 ...

  5. Web安全Day1 - SQL注入实战攻防

    声明:文中所涉及的技术.思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担! 本专题文章导航 1.Web安全Day1 - SQL注入实战攻防 http ...

  6. 小迪安全第14天 web漏洞,SQL注入之类型及提交注入

    14 web漏洞,SQL注入之类型及提交注入 ​ 在真实 SQL 注入安全测试中,我们一定要先明确提交数据及提交方法后再进行注入,其中提交数据类型和提交方法可以通过抓包分析获取, 后续安全测试中我们也 ...

  7. Web安全性测试—SQL注入

    Web安全性测试-SQL注入 因为要对网站安全性进行测试,所以,学习了一些sql注入的知识. 在网上看一些sql注入的东东,于是想到了对网站的输入框进行一些测试,本来是想在输入框中输入<scri ...

  8. mysql node null_node-mysql中防止SQL注入的方法总结

    SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. node-mysql中防止S ...

  9. expressjs如何做mysql注入_node-mysql中防止SQL注入的方法

    大家都知道SQL注入对于网站或者服务器来讲都是一个非常危险的问题,如果这一方面没处理好的话网站可能随时给注入了,所以这篇文章就给大家总结了node-mysql中防止SQL注入的几种常用做法,有需要的朋 ...

最新文章

  1. Listener监听器之HttpSessionListener
  2. 如何打造基于比特币现金(BCH)的消费需求
  3. Android 使用ORMLite 操作数据库
  4. MySQL REGEXP:正则表达式查询
  5. html怎么建边框,如何使用CSS创建多色边框?
  6. oracle cube排序,Oracle命令CUBE
  7. java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题)
  8. w10查看端口_win10系统使用dos命令查看端口的解决教程
  9. word转换成pdf转换器2015绿色版
  10. 非常规的DeepFaceLab(DeepFake)小花招和注意事项
  11. 模型调参(一):weight decay(权重衰减)【“权重衰减”也叫“L1/L2正则化”】【权重衰减系数:正则项系数 λ】【对参数w有影响、对偏置b没影响】【偏置不加正则】
  12. JAVA中InputStream转base64
  13. 一文读懂电感器的原理、结构、作用及分类
  14. Shell入门之管道
  15. c语言编译器tc2.0,Wintc软件下载
  16. Linux搭建waf防火墙,Linux入门教程:nginx安装配置naxsi waf防火墙,nginxwaf Naxsi 不依赖...
  17. 统计学习导论 - 基于R的应用 学习笔记1
  18. 快过年了,Python实现12306查票以及自动购票....
  19. 红帽Linux重置root密码
  20. 计算机找不到工具怎么办,电脑工具栏声音图标不见了怎么办

热门文章

  1. Matlab中fileter和conv的区别及卷积的计算方法
  2. vivado----fpga硬件调试 (四)----mark_debug
  3. C++实现8皇后问题
  4. ADS1.2安装要点
  5. Python爬虫的终极必杀绝技
  6. 各大视觉技术看透女神吗
  7. web后端轻量级框架flask基础调用程序模板
  8. Authentication method 'caching_sha2_password' not supported by any of the available plugins.
  9. Spark 2.4重磅发布:优化深度学习框架集成,提供更灵活的流式接收器
  10. 简单几何(推公式) UVA 11646 Athletics Track