/// ***************C#版SQL防注入程序 v1.0************

/// *使用方法:

/// 一、整站防注入(推荐)

/// 在Global.asax.cs中查找Application_BeginRequest函数加入代码,如下

///   protected void Application_BeginRequest(Object sender, EventArgs e)

///              {

///             //防SQL注入代码

///             SqlInject myCheck = new SqlInject(this.Request);

///             myCheck.CheckSqlInject();

///              }

/// 二、单独页面防注入

/// 在要保护的页面cs文件的Page_Load函数中加入代码,如下:

///     protected void Page_Load(object sender, EventArgs e)

///     {

///             SqlInject myCheck = new SqlInject(this.Request);

///             myCheck.CheckSqlInject();

///     }

/// 三、基本设置

/// 1.修改private const int _type = 3 的_type参数来设置Sql注入警告及日志记录方式;

/// 2.修改string errRedirectPage = "/err.aspx" 来设置自定义错误处理页面;

/// 3.如果_type=1或者3,那么请务必设置string errMDBpath = "/SqlInject.mdb"相应的日志数据库路径;

/// 4.如果采取默认程序,那么请将本程序对应的SqlInject.mdb放至网站系统根目录下。

///

/// *版权说明:

/// 一、部分代码参考Asp版Sql通用防注入程序3.2 Neeao站点:http://www.neeao.com

/// 二、大部分核心代码参考网上匿名.NET防注入代码,感谢

/// 三、此代码下载和更新站点:www.wbyj.com

/// ***********************************

/// </summary>

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.OleDb;

using System.Text.RegularExpressions;

public class SqlInject : System.Web.UI.Page

{

//检测到注入后的处理方式:   0:仅警告;1:警告+记录;2:警告+自定义错误页面;3:警告+记录+自定义错误页面

private const int _type = 3;

private const string errRedirectPage = "/err.aspx";

//如果记录注入信息,那么请设置:errMDBpath:数据库路径

private const string errMDBpath = "/SqlInject.mdb";

//过滤特征字符

private const string StrKeyWord=@"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 const string StrRegex=@"-|;|,|/|(|)|[|]|{|}|%|@|*|'|!";

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)

System.Web.HttpContext.Current.Response.Write("<br>****以上信息已记录至日志数据库****");

else

System.Web.HttpContext.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);

}

///<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;

}

}

SQL防注入程序 v1.0相关推荐

  1. 方立勋_30天掌握JavaWeb_JDBC、SQL防注入(一)

    JDBC简介 数据库驱动 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC. JDBC全称为:Java Data Base Connectivity(java ...

  2. PHP之SQL防注入代码,PHP防XSS 防SQL注入的代码

    360提示XSS漏洞?这个XSS漏洞很不好修复.....如果是PHP程序的话,可以用下面的代码来过滤... PHP防XSS 防SQL注入的代码 class protection{public stat ...

  3. PHP SQL防注入

    参考资料: PHP中防止SQL注入的方法 php操作mysql防止sql注入(合集) PDO防注入原理分析以及使用PDO的注意事项 php SQL 防注入的一些经验 如何在PHP中防止SQL注入? P ...

  4. Python之SQL 防注入问题,绕过登录验证进入数据库,可能会导致大问题。

    SQL 防注入问题 所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗 服务器执行恶意的SQL命令. 例子 user="root&quo ...

  5. 闪灵短链-微信QQ域名防拦截系统 v1.0

    介绍: 闪灵短链-微信QQ域名防拦截系统是一款以php+MySQL进行开发的短网址在线生成系统源码. 功能介绍: 1.可将长网址自动缩短为短网址,方便记忆和使用. 2.短网址默认为临时有效,可付费升级 ...

  6. php之防注入程序绕过浅谈

    <?php /*判断传递的变量是否含有非法字符 如:$_POST/$_GET 功能:SQL防注入系统 */ //屏蔽错误提示 error_reporting(7); //需要过滤的字符 $Arr ...

  7. 若依框架(SpringBoot)增加SQL防注入处理,SpringBoot增加SQL防注入

    文章目录 若依框架增加SQL防注入处理,SpringBoot项目可用 增加Filter 若依框架增加SQL防注入处理,SpringBoot项目可用 思路:增加Filter对请求中的请求参数进行过滤进行 ...

  8. 屏蔽php显示错误信息+sql防注入常用函数

    屏蔽php显示错误信息 那是因为php.ini中关闭了错误显示,将错误写成了文件,这是人为设置的结果 display_errors =on就好了. 当PHP启动的时候,它将在Web服务器标准头信息中添 ...

  9. 用云开发搭建的微信答题小程序v1.0

    近来百无聊赖,遂抽空做了一个答题小程序的系列教程,以及分享源码,是用云开发搭建的微信答题小程序v1.0. 界面截图 该答题小程序大致如下图: 结构层级 主要程序由3个界面组成,分别是index,tes ...

最新文章

  1. 腾讯第100个开源项目:微信开源推理加速工具TurboTransformers
  2. 【深度学习】多层感知器高级使用
  3. 落地华东总部、上线创新云、签约AIoT产业基金……京东云南京“新动作”...
  4. struts 模块化开发学习
  5. Py修行路 python基础 (二十)模块 time模块,random模块,hashlib模块,OS及sys模块...
  6. C++string类常用函数 c++中的string常用函数用法总结
  7. 机器人的动力学有什么用呢?
  8. 深入浅出Mybatis系列(六)---objectFactory、plugins、mappers简介与配置[转]
  9. chrome windows安装包_谷歌团队揭示了零日Windows漏洞
  10. ORCALE常用查询语句
  11. 查看别人IP经典办法
  12. 东方博宜 #1008字符图形9-数字正三角
  13. IT行业程序员工资一般多少?发量与薪资成反比
  14. 机器学习笔记 - 时间序列的季节性
  15. 原创2D/3D游戏引擎源代码开源
  16. 使用命令设置Windows音量和音频输出设备
  17. ubuntu快捷键及Linux下一些主要目录
  18. 【金融风控-贷款违约预测】数据挖掘学习:5.模型融合
  19. 【5G NR】NG接口
  20. 重磅 | 《2020年度中国计算机视觉人才调研报告》正式出炉

热门文章

  1. DHCP服务器在企业网中的应用
  2. ubuntu-基本命令篇-12-磁盘管理
  3. iOS 隐藏导航栏整个视图上移闪屏问题
  4. paramiko向服务器自动上传下载文件
  5. 聊聊flink的InternalTimeServiceManager
  6. Idea 插件开发常用的方法
  7. Android OTA在线升级二(升级包编译原理分析) 【转】
  8. trigger() --工作中问题nav样式
  9. JS重复引用也会导致错误
  10. phalapi-进阶篇4(notrom进阶以及事务操作)