web 中防止sql注入
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注入相关推荐
- Python全栈(五)Web安全攻防之7.MySQL注入读写文件和HTTP头中的SQL注入
文章目录 一.MySQL注入读写文件 1.搭建新的测试环境(靶场) 2.读写文件概述 3.读取文件 4.写入文件 二.HTTP头中的SQL注入 1.HTTP头中的SQL注入介绍 updatexml函数 ...
- Java应用程序中的SQL注入
在本文中,我们将讨论什么是SQL注入攻击. 以及它如何影响任何Web应用程序使用后端数据库. 在这里,我专注于Java Web应用程序. 开放Web应用程序安全项目(OWAP)列出了SQL注入是Web ...
- web安全学习-sql注入-针对mysql的攻击
文章目录 1. 前言 补充:读取客户端本地文件到服务端mysql数据库 补充:利用全局日志写shell 补充:修改mysql的root密码 补充:配置远程登录 补充:低权限下读文件 补充:高版本mys ...
- 关于web安全之sql注入攻击
前言:①这个晨讲我构思了两个星期,但是之前电脑坏了,一直拖到昨天才开始着手准备,时间仓促, 能力有限,不到之处请大家批评指正: ②我尽量将文中涉及的各种技术原理,专业术语讲的更加通俗易懂,但这个前提是 ...
- Web安全Day1 - SQL注入实战攻防
声明:文中所涉及的技术.思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担! 本专题文章导航 1.Web安全Day1 - SQL注入实战攻防 http ...
- 小迪安全第14天 web漏洞,SQL注入之类型及提交注入
14 web漏洞,SQL注入之类型及提交注入 在真实 SQL 注入安全测试中,我们一定要先明确提交数据及提交方法后再进行注入,其中提交数据类型和提交方法可以通过抓包分析获取, 后续安全测试中我们也 ...
- Web安全性测试—SQL注入
Web安全性测试-SQL注入 因为要对网站安全性进行测试,所以,学习了一些sql注入的知识. 在网上看一些sql注入的东东,于是想到了对网站的输入框进行一些测试,本来是想在输入框中输入<scri ...
- mysql node null_node-mysql中防止SQL注入的方法总结
SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. node-mysql中防止S ...
- expressjs如何做mysql注入_node-mysql中防止SQL注入的方法
大家都知道SQL注入对于网站或者服务器来讲都是一个非常危险的问题,如果这一方面没处理好的话网站可能随时给注入了,所以这篇文章就给大家总结了node-mysql中防止SQL注入的几种常用做法,有需要的朋 ...
最新文章
- Listener监听器之HttpSessionListener
- 如何打造基于比特币现金(BCH)的消费需求
- Android 使用ORMLite 操作数据库
- MySQL REGEXP:正则表达式查询
- html怎么建边框,如何使用CSS创建多色边框?
- oracle cube排序,Oracle命令CUBE
- java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题)
- w10查看端口_win10系统使用dos命令查看端口的解决教程
- word转换成pdf转换器2015绿色版
- 非常规的DeepFaceLab(DeepFake)小花招和注意事项
- 模型调参(一):weight decay(权重衰减)【“权重衰减”也叫“L1/L2正则化”】【权重衰减系数:正则项系数 λ】【对参数w有影响、对偏置b没影响】【偏置不加正则】
- JAVA中InputStream转base64
- 一文读懂电感器的原理、结构、作用及分类
- Shell入门之管道
- c语言编译器tc2.0,Wintc软件下载
- Linux搭建waf防火墙,Linux入门教程:nginx安装配置naxsi waf防火墙,nginxwaf Naxsi 不依赖...
- 统计学习导论 - 基于R的应用 学习笔记1
- 快过年了,Python实现12306查票以及自动购票....
- 红帽Linux重置root密码
- 计算机找不到工具怎么办,电脑工具栏声音图标不见了怎么办
热门文章
- Matlab中fileter和conv的区别及卷积的计算方法
- vivado----fpga硬件调试 (四)----mark_debug
- C++实现8皇后问题
- ADS1.2安装要点
- Python爬虫的终极必杀绝技
- 各大视觉技术看透女神吗
- web后端轻量级框架flask基础调用程序模板
- Authentication method 'caching_sha2_password' not supported by any of the available plugins.
- Spark 2.4重磅发布:优化深度学习框架集成,提供更灵活的流式接收器
- 简单几何(推公式) UVA 11646 Athletics Track