C# 防止SQL注入 2 转载的

C# 防止SQL注入

http://blog.csdn.net/limlimlim/article/details/8597508

  • 摘要:在做Sql注入防止的时候找了很多代码,但都不十分满意,有的需要一个页面一个页面去调用,有的则执行错误.于是在一个解决方案上面修改了一下,基本实现了全站防止SQL注入的功能,有什么不足的地方,还请批评指正

在做Sql注入防止的时候找了很多代码,但都不十分满意,有的需要一个页面一个页面去调用,有的则执行错误.于是在一个解决方案上面修改了一下,基本实现了全站防止SQL注入的功能,有什么不足的地方,还请批评指正

SqkKey.cs

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

-->using System;
using System.Text.RegularExpressions;

using System.Web;

/**//// <summary>

/// SqlKey 的摘要说明。

/// </summary>

public class SqlKey

{

private HttpRequest request;

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

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

public SqlKey(System.Web.HttpRequest _request)

{

//

// TODO: 在此处添加构造函数逻辑

//

this.request = _request;

}

/**//// <summary>

/// 只读属性 SQL关键字

/// </summary>

public static string KeyWord

{

get

{

return StrKeyWord;

}

}

/**//// <summary>

/// 只读属性过滤特殊字符

/// </summary>

public static string RegexString

{

get

{

return StrRegex;

}

}

/**//// <summary>

/// 检查URL参数中是否带有SQL注入可能关键字。

/// </summary>

/// <param name="_request">当前HttpRequest对象</param>

/// <returns>存在SQL注入关键字true存在,false不存在</returns>

public bool CheckRequestQuery()

{

if (request.QueryString.Count != 0)

{

//若URL中参数存在,逐个比较参数。

foreach (string i in this.request.QueryString)

{

// 检查参数值是否合法。

if (i == "__VIEWSTATE") continue;

if (i == "__EVENTVALIDATION") continue;

if (CheckKeyWord(request.QueryString[i].ToString()))

{

return true;

}

}

}

return false;

}

/**//// <summary>

/// 检查提交表单中是否存在SQL注入可能关键字

/// </summary>

/// <param name="_request">当前HttpRequest对象</param>

/// <returns>存在SQL注入关键字true存在,false不存在</returns>

public bool CheckRequestForm()

{

if (request.Form.Count > 0)

{

//获取提交的表单项不为0 逐个比较参数

foreach (string i in this.request.Form)

{

if (i == "__VIEWSTATE") continue;

if (i == "__EVENTVALIDATION") continue;

//检查参数值是否合法

if (CheckKeyWord(request.Form[i]))

{

//存在SQL关键字

return true;

}

}

}

return false;

}

/**//// <summary>

/// 静态方法,检查_sword是否包涵SQL关键字

/// </summary>

/// <param name="_sWord">被检查的字符串</param>

/// <returns>存在SQL关键字返回true,不存在返回false</returns>

public static bool CheckKeyWord(string _sWord)

{

string word=_sWord;

string[] patten1 = StrKeyWord.Split(‘|‘);

string[] patten2 = StrRegex.Split(‘|‘);

foreach (string i in patten1)

{

if (word.Contains(" " + i) || word.Contains(i + " "))

{

return true;

}

}

foreach (string i in patten2)

{

if (word.Contains(i))

{

return true;

}

}

return false;

}

/**//// <summary>

/// 反SQL注入:返回1无注入信息,否则返回错误处理

/// </summary>

/// <returns>返回1无注入信息,否则返回错误处理</returns>

public string CheckMessage()

{

string msg = "1";

if (CheckRequestQuery()) //CheckRequestQuery() || CheckRequestForm()

{

//msg = "<span style=‘font-size:24px;‘>非法操作!<br>";

//msg += "操作IP:" + request.ServerVariables["REMOTE_ADDR"] + "<br>";

//msg += "操作时间:" + DateTime.Now + "<br>";

//msg += "页面:" + request.ServerVariables["URL"].ToLower() + "<br>";

//msg += "<a href="#" onclick="history.back()">返回上一页</a></span>";

}

return msg.ToString();

}

}

------------------------------------------------------

在Global.asax文件中加入以下代码

Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/

--> void Application_BeginRequest(Object sender, EventArgs e)

{

SqlKey myCheck = new SqlKey(this.Request);

bool a = myCheck.CheckRequestForm();

bool b = myCheck.CheckRequestQuery();

if (myCheck.CheckRequestForm() || myCheck.CheckRequestQuery())

{

Response.Write("有");

}

else

{

Response.Write("无");

}

}

时间: 2024-08-08 09:41:43

C# 防止SQL注入 2 转载的的相关文章

10个SQL注入工具(转载)

众所周知,SQL注入攻击是最为常见的Web应用程序攻击技术.同时SQL注入攻击所带来的安全破坏也是不可弥补的.以下罗列的10款SQL注入工具可帮助管理员及时检测存在的漏洞. BSQL Hacker 10个SQL注入工具 BSQL Hacker是由Portcullis实验室开发的,BSQL Hacker 是一个SQL自动注入工具(支持SQL盲注),其设计的目的是希望能对任何的数据库进行SQL溢出注入. BSQL Hacker的适用群体是那些对注入有经验的使用者和那些想进行自动SQL注入的人群.BS

[转载]SQL注入绕过技巧汇总

转载一篇比较好的文章,乘心物游大佬写的. SQL注入的绕过技巧有很多,具体的绕过技巧需要看具体的环境,而且很多的绕过方法需要有一个实际的环境,最好是你在渗透测试的过程中遇到的环境,否则如果仅仅是自己凭空想,那显然是不靠谱的.这篇文章就是总结我在遇到的CTF题目或者是渗透环境的过程中,所使用到的sql注入的绕过技巧,这篇文章随着自己的见识和能力不断的提升,所总结的方法也会变多.1.引号绕过 会使用到引号的地方是在于最后的where子句中.如下面的一条sql语句,这条语句就是一个简单的用来查选得到u

[转载]我的WafBypass之道(SQL注入篇)

现在位置: 首页 > 文章 > Web安全 > 正文 我的WafBypass之道(SQL注入篇) 2016 /11/23 16:16 6,444 评论 3 条 [本文转自安全脉搏战略合作伙伴先知技术社区 原帖地址  安全脉搏编辑huan9740整理发布] 0x00 前言 去年到现在就一直有人希望我出一篇关于waf绕过的文章,我觉得这种老生常 谈的话题也没什么可写的. 很多人一遇到waf就发懵,不知如何是好,能搜到的各 种姿势也是然并卵. 但是积累姿势的过程也是迭代的,那么就有了此文,用来

利用SQL注入漏洞登录后台的实现方法 。。。。转载

一.SQL注入的步骤 a) 寻找注入点(如:登录界面.留言板等) b) 用户自己构造SQL语句(如:' or 1=1#,后面会讲解) c) 将sql语句发送给数据库管理系统(DBMS) d) DBMS接收请求,并将该请求解释成机器代码指令,执行必要的存取操作 e) DBMS接受返回的结果,并处理,返回给用户 因为用户构造了特殊的SQL语句,必定返回特殊的结果(只要你的SQL语句够灵活的话). 下面,我通过一个实例具体来演示下SQL注入 二.SQL注入实例详解(以上测试均假设服务器未开启magic

oracle体系结构------Oracle 使用PreparedStatement防止SQL注入---转载

一条效率差的sql语句,足以毁掉整个应用. Statement是PreparedStatement的父接口,不进行预编译操作,减少了进行预编译的开销.单次运行PreparedStatement要比Statement要慢一些. PreparedStatement可以实现Statement的所有功能,但是之所以叫它预编译指令,是因为在创建它的一个对象时可以给定具有一定格式的SQL字符串,然后用它的setXXX方法给指定的SQL语句以填空的方式赋值,具有这样的特性后,它在多次执行一条固定格式的字符串时

C# 防止SQL注入 转载的

C# 防止SQL注入攻击 http://blog.csdn.net/limlimlim/article/details/8629582 l登录判断:select * from T_Users where UserName=... and Password=...,将参数拼到SQL语句中. l构造恶意的Password:hello' or 1=1 -- l                      if (dataReader.Read()) l                        {

转载关于sql 注入

到这里,前期工作已经做好了,接下来将展开我们的重头戏:SQL注入2) 构造SQL语句 填好正确的用户名(marcofly)和密码(test)后,点击提交,将会返回给我们"欢迎管理员"的界面. 因为根据我们提交的用户名和密码被合成到SQL查询语句当中之后是这样的: select * from users where username='marcofly' and password=md5('test') 很明显,用户名和密码都和我们之前给出的一样,肯定能够成功登陆.但是,如果我们输入一个

【转载】SQL注入攻防入门详解

滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园  首页  博问  闪存    联系  订阅 管理 随笔-58 评论-2028 文章-5  trackbacks-0 站长统计|  今日IP[353] | 今日PV[848] | 昨日IP[922] |  昨日PV[2188] |当前在线[10] SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但

WEB安全:SQL注入

SQL注入是网站和web应用程序中最常见的安全漏洞.这种恶意技术有很多应用场景, 但(SQL注入)通常是指在数据输入的地方注入代码以利用数据库应用程序中的安全漏洞. SQL注入在接收用户输入的接口处 (也就是说在注册表单.查询表单等地方)尝试执行注入操作.对(SQL注入)高度关注以及方便检测数据库应用程序中的安全漏洞使得攻击者经常地以最小的努力"测试"网站/应用程序的安全完整性. 危害 成功执行的SQL注入有可能严重危害数据库中存储的数据.这种攻击的意图可能包括(但不限于)任何以下方式