/// <summary>
/// 把字符串中包含的敏感词替换成别的关键字
/// </summary>
/// <param name="s">原字符串</param>
/// <param name="oldstr">要查找的敏感词</param>
/// <param name="newstr">替换后的关键字</param>
/// <returns>新的字符串</returns>
private string ChangeSubStr(string s, string oldstr, string newstr)
{
if (s == null || s == "")
return "";
//转为小写
string s1 = s.ToLower();
//获取第一个匹配项的索引值
int i = s1.IndexOf(oldstr);
//如果有匹配的(有关键字)
while (i != -)
{
//截取有敏感词之前的内容
string l = s.Substring(, i);
//截取敏感词之后的内容
string r = s.Substring(i + oldstr.Length);
//组合成新的内容
s = l + newstr + r;
s1 = s.ToLower();
i = s1.IndexOf(oldstr);
}
return s;
} private void CheckForSQLs(HttpRequest Request, HttpResponse Response)
{
string[] sql = new string[] { "/*", "*/", "--", "'", "declare", "select", "into", "insert", "update", "delete", "drop", "create", "exec", "master" };
string[] sqlc = new string[] { "/ *", "* /", "- -", "'", "declare", "select", "into", "insert", "update", "delete", "drop", "create", "exec", "master" }; //Form if (Request.Form.Count > )
{
Type type = typeof(System.Collections.Specialized.NameObjectCollectionBase);// Request.Form.GetType();
PropertyInfo pi = type.GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
pi.SetValue(Request.Form, false, null); for (int i = ; i < Request.Form.Count; i++)
{
string s = Request.Form[i];
//查询每个敏感词,如果字符里含有敏感词,则替换成中文类型的字符
for (int j = ; j < sql.Length; j++)
s = ChangeSubStr(s, sql[j], sqlc[j]);
Request.Form.Set(Request.Form.GetKey(i), s);
}
pi.SetValue(Request.Form, true, null);
} //QueryString
if (Request.QueryString.Count > )
{
Type type = typeof(System.Collections.Specialized.NameObjectCollectionBase);// Request.Form.GetType();
PropertyInfo pi = type.GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
pi.SetValue(Request.QueryString, false, null); for (int i = ; i < Request.QueryString.Count; i++)
{
string s = Request.QueryString[i];
for (int j = ; j < sql.Length; j++)
s = ChangeSubStr(s, sql[j], sqlc[j]);
Request.QueryString.Set(Request.QueryString.GetKey(i), s);
}
pi.SetValue(Request.QueryString, true, null);
} //cookie
for (int k = ; k < Request.Cookies.Count; k++)
{
HttpCookie c = Request.Cookies[k]; if (c.Values.Count > )
{
Type type = typeof(System.Collections.Specialized.NameObjectCollectionBase);// Request.Form.GetType();
PropertyInfo pi = type.GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
pi.SetValue(c.Values, false, null); for (int i = ; i < c.Values.Count; i++)
{
string s = c.Values[i];
for (int j = ; j < sql.Length; j++)
s = ChangeSubStr(s, sql[j], sqlc[j]);
c.Values.Set(c.Values.GetKey(i), s);
}
pi.SetValue(c.Values, true, null);
} Response.Cookies.Set(c);
}
}

在CSDN上看到的一个过滤方法,感觉还不错的更多相关文章

  1. 如何删除一个CSDN上自己上传的资源

    原文地址:http://www.xuebuyuan.com/1875216.html 昨天晚上进行测试,上传了一个压缩包和大家分享,测试完成后,为了不想给被测试的公司造成伤害,决定把上传的包删除,结果 ...

  2. 大家好,我是一个热爱编程的大二在读生,今天来移植一下CSDN上的博客

    今天开了博客园,将原来再CSDN上的博客移植一下,嘿嘿嘿.

  3. 【云计算】K8S DaemonSet 每个node上都运行一个pod

    Kubernetes容器集群中的日志系统集成实践 Kubernetes是原生的容器编排管理系统,对于负载均衡.服务发现.高可用.滚动升级.自动伸缩等容器云平台的功能要求有原生支持.今天我分享一下我们在 ...

  4. Android利用网络编程HttpClient批量上传(一个)

    请尊重他人的劳动成果.转载请注明出处:Android网络编程之使用HttpClient批量上传文件 我曾在<Android网络编程之使用HTTP訪问网络资源>一文中介绍过HttpCient ...

  5. CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全) (转)

    JDBC事务管理 Spring提供编程式的事务管理(Programmatic transaction manage- ment)与声明式的事务管理(Declarative transaction ma ...

  6. SpringBoot图片上传(四) 一个input上传N张图,支持各种类型

    简单介绍:需求上让实现,图片上传,并且可以一次上传9张图,图片格式还有要求,网上找了一个测试了下,好用,不过也得改,仅仅是实现了功能,其他不尽合理的地方,还需自己打磨. 代码: //html<d ...

  7. 这些年我在技术路上做过最虚伪愚蠢的事情,就是在CSDN上刷屏赚分

    现在似乎Github成了所谓技术人士的新宠,之前是博客,更早则是论坛. CSDN是众多技术论坛里比较突出的一个,人多高手也多,很多问题都能得到满意的回答. 谁都希望自己卓尔不群,我也不例外,我也想像那 ...

  8. js--数组的filter()过滤方法的使用

    前言 你还在通过for循环遍历数组吗?你还在遍历之后一项一项的通过if判断过滤你需要的数据吗?你还在写着一大堆代码实现一个简单的过滤数据功能吗?那么,今天他来了.他就是这里要介绍的es6中数组filt ...

  9. UEditor百度编辑器,工具栏上自定义添加一个普通按钮

    添加一个名叫“hougelou”的普通按钮在工具栏上: 第一步:找到ueditor.config.js文件中的toolbars数组,增加一个“hougelou”字符串,然后找到labelMap数组,对 ...

随机推荐

  1. 【Heritrix基础教程之3】Heritrix的基本架构

    Heritrix可分为四大模块: 1.控制器CrawlController 2.待处理的uri列表  Frontier 3.线程池 ToeThread 4.各个步骤的处理器 (1)Pre-fetch ...

  2. B. Sereja and Mirroring

    B. Sereja and Mirroring time limit per test 1 second memory limit per test 256 megabytes input stand ...

  3. gcc和arm-linux-gcc区别

    安装arm-linux-gcc的时候,查了不少资料,总算环境搭好了.于是,想写个程序员的经典程序---hello world. 语法都没错,生成test.c. 命令行运行:arm-linux-gcc ...

  4. ffmpeg常用参数一览

    基本选项: -formats 输出所有可用格式 -f fmt 指定格式(音频或视频格式) -i filename 指定输入文件名,在linux下当然也能指定:0.0(屏幕录制)或摄像头 -y 覆盖已有 ...

  5. 百度Echarts使用心得

    echarts官网:http://echarts.baidu.com/index.html 最近用了echart,有一下问题需要注意: 1.echarts的使用实例 代码:从地图中取得whitejso ...

  6. ASP.NET实现图片防盗链(转)

    使用httpHandle来实现,对图片文件的请求做专门的处理第一步:创建一个类,继承自IHttpHandler,代码如下 C# code using System; using System.Web; ...

  7. dojo事件

    dojo.connect 和 dojo.disconnect /*建立连接*/ dojo.connect(/*Object|null*/ obj, /*String*/ event, /*Object ...

  8. 使用CSC.EXE编译第一个HELLO WORLD

    坐的没事,下了个C#2008,看帮助文件写了个HELLO.CS的源文件: //hello.cs //Show "Hello Word!" using system; class h ...

  9. linux下C++ STL hash_map的使用以及使用char *型变量作为Key值的一大“坑”

    计算机编程中经常会用到hash表,而在C++中,使用STL编程更是少不了的.本文将介绍STL中hash_map的使用.在hash_map中使用自定义类型作为key值的方法以及在使用char *类型作为 ...

  10. IE10以下placeholder不兼容

    做页面的时候在谷歌中是显示的,但是换了IE之后总是不显示,一个文本框还好,如果有多个的话,如图: 添加以下一段Jquery代码: <script> var JPlaceHolder = { ...