解决sql注入的类(c#版java版可效仿)

上传人:xiao****1972 文档编号:84779390 上传时间:2019-03-04 格式:DOC 页数:6 大小:26.50KB
返回 下载 相关 举报
解决sql注入的类(c#版java版可效仿)_第1页
第1页 / 共6页
解决sql注入的类(c#版java版可效仿)_第2页
第2页 / 共6页
解决sql注入的类(c#版java版可效仿)_第3页
第3页 / 共6页
解决sql注入的类(c#版java版可效仿)_第4页
第4页 / 共6页
解决sql注入的类(c#版java版可效仿)_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《解决sql注入的类(c#版java版可效仿)》由会员分享,可在线阅读,更多相关《解决sql注入的类(c#版java版可效仿)(6页珍藏版)》请在金锄头文库上搜索。

1、解决Sql注入的类(C#版,Java版可效仿) 全站防SQL注入类的修改版本 关键词: C# SQL注入类 相信Sql注入时下已不再是什么新名词了,今天也正好撞上这样的bug,网上这方面的理论很多,但真正有提供一个明确完整的解决方案的,实在是少得可怜(不知是不是我的手气太差了 ).废话就不多说了,下面本人就此次整理出来的Sql注入处理类打出告示,希望给需要的朋友一点帮助 需要的朋友只需将下面的代码复制粘贴到一个cs文件或者下载附件就可以用了 值得一提的是:如果使用全局性的检验方式,则在开发之初无需考虑Sql注入的情况 / / 防SQL注入检查器 / public class SqlCheck

2、er /当前请求对象 private HttpRequest request; /当前响应对象 private HttpResponse response; /安全Url,当出现Sql注入时,将导向到的安全页面,如果没赋值,则停留在当前页面 private string safeUrl = String.Empty; /Sql注入时,可能出现的sql关键字,可根据自己的实际情况进行初始化,每个关键字由|分隔开来 /private const string StrKeyWord = “select|insert|delete|from|count(|drop table|update|trunc

3、ate|asc(|mid(|char(|xp_cmdshell|exec master|netlocalgroup administrators|:|net user|“|or|and“; private const string StrKeyWord = “select|insert|delete|from|drop table|update|truncate|exec master|netlocalgroup administrators|:|net user|or|and“; /Sql注入时,可能出现的特殊符号,可根据自己的实际情况进行初始化,每个符号由|分隔开来 /private co

4、nst string StrRegex = “-|;|,|/|(|)|%|*|!|“; private const string StrRegex = “=|!|“; public SqlChecker() / / TODO: 在此处添加构造函数逻辑 / / / 由此构造函数创建的对象,在验证Sql注入之后将停留在原来页面上 / / 当前请求的 Request 对象 / 当前请求的 Response 对象 public SqlChecker(HttpRequest _request,HttpResponse _response) this.request = _request; this.re

5、sponse = _response; / / 由此构造函数创建的对象,在验证Sql注入之后将请求将导向由 _safeUrl 指定的安全url页面上 / / 当前请求的 Request 对象 / 当前请求的 Response 对象 / 验证Sql注入之后将导向的安全 url public SqlChecker(HttpRequest _request,HttpResponse _response,string _safeUrl) this.request = _request; this.response = _response; this.safeUrl = _safeUrl; / / 只读

6、属性 SQL关键字 / public string KeyWord get return StrKeyWord; / / 只读属性过滤特殊字符 / public string RegexString get return StrRegex; / / 当出现Sql注入时需要提示的错误信息(主要是运行一些客户端的脚本) / public string Msg get string msg = “ “ + “ alert(请勿输入非法字符!); “; if (this.safeUrl = String.Empty) msg += “ window.location.href = “ + reques

7、t.RawUrl + “; else msg += “ window.location.href = “ + safeUrl + “; msg += “; return msg; / / 检查URL参数中是否带有SQL注入的可能关键字。 / / 存在SQL注入关键字时返回 true,否则返回 false public bool CheckRequestQuery() bool result = false; if (request.QueryString.Count != 0) /若URL中参数存在,则逐个检验参数。 foreach (string queryName in this.requ

8、est.QueryString) /过虑一些特殊的请求状态值,主要是一些有关页面视图状态的参数 if (queryName = “_VIEWSTATE“ | queryName = “_EVENTVALIDATION“) continue; /开始检查请求参数值是否合法 if (CheckKeyWord(request.QueryStringqueryName) /只要存在一个可能出现Sql注入的参数,则直接退出 result = true; break; return result; / / 检查提交表单中是否存在SQL注入的可能关键字 / / 存在SQL注入关键字时返回 true,否则返回

9、 false public bool CheckRequestForm() bool result = false; if (request.Form.Count 0) /若获取提交的表单项个数不为0,则逐个比较参数 foreach (string queryName in this.request.Form) /过虑一些特殊的请求状态值,主要是一些有关页面视图状态的参数 if (queryName = “_VIEWSTATE“ | queryName = “_EVENTVALIDATION“) continue; /开始检查提交的表单参数值是否合法 if (CheckKeyWord(requ

10、est.FormqueryName) /只要存在一个可能出现Sql注入的参数,则直接退出 result = true; break; return result; / / 检查_sword是否包涵SQL关键字 / / 需要检查的字符串 / 存在SQL注入关键字时返回 true,否则返回 false public bool CheckKeyWord(string _sWord) bool result = false; /模式1 : 对应Sql注入的可能关键字 string patten1 = StrKeyWord.Split(|); /模式2 : 对应Sql注入的可能特殊符号 string p

11、atten2 = 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(sqlKe

12、y) = 0) /只要存在一个可能出现Sql注入的参数,则直接退出 result = true; break; return result; / / 执行Sql注入验证 / public void Check() if (CheckRequestQuery() | CheckRequestForm() response.Write(Msg); response.End(); / 使用说明 / / 使用时可以根据需要决定是要进行全局性(即针对整个应用程序)的Sql注入检查 / ,还是局部性(即在针对某个页面)的Sql注入检查 /*= 全局性设置:在Global.asax.cs 中加上以下代码 =

13、 protected void Application_BeginRequest(Object sender, EventArgs e) SqlChecker SqlChecker = new SqlChecker(this.Request,this.Response); /或 SqlChecker SqlChecker = new SqlChecker(this.Request,this.Response,safeUrl); SqlChecker.Check(); =*/ /*= 局部性:在任何时候都可直接用以下代码来实现Sql注入检验 = SqlChecker SqlChecker = new SqlChecker(this.Request,this.Response); /或 SqlChecker SqlChecker = new SqlChecker(this.Request,this.Response,safeUrl); SqlChecker.Check(); =*/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号