/// <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. kettle工具同步数据乱码-Linux下乱码问题二

    将写好的kettle工程部署到Linux下后,同步的数据都成了乱码,幸运的是数据库有备份. 下面就说一下,kettle工程如何同步两端编码格式都是utf8的数据库. 我们只需要更改kettle数据库连 ...

  2. CentOS6.5下使用NetHogs监控进程网络使用情况

    Nethogs 是一个终端下的网络流量监控工具,它的特别之处在于能够显示每一个进程的带宽占用情况,这样能够更直观获取网络使用情况.它支持 IPv4 和 IPv6 协议.支持本地网卡及 PPP 链接. ...

  3. 用Jfree实现条形柱状图表,java代码实现

    用Jfree实现条形柱状图表,java代码实现.可经经常使用于报表的制作,代码自己主动生成后能够自由查看.能够自由配置图表的各个属性,用来达到自己的要求和目的 package test1; impor ...

  4. mysq优化

    MySQL调优可以从几个方面来做:1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样可 ...

  5. JQ 操作样式,单选按钮跟复选框

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 大数值基础、for与while循环的简单对比

  7. JAVA中List与Array之间互换

    1.Array转List ArrayList<String> list = new ArrayList<String>(); String[] arr = new String ...

  8. ecos3.0编译 if_lancepci.c:528: 错误: 赋值运算的左操作数必须是左值

    /home/xin/ecos3/ecos-3.0/packages/devs/eth/amd/lancepci/v3_0/src/if_lancepci.c:528: 错误: 赋值运算的左操作数必须是 ...

  9. Zend Framework 框架搭建

    通过手工方法搭建Zend Framework的MVC框架结构.首先看一下zend framework mvc的目录结构 1. 在根目录下面创建 public ,并在 public 下创建 index. ...

  10. Centos6.5下安装php

    安装php: yum -y install php 重启httpd服务激活php: /etc/init.d/httpd restart 测试php是否安装完成 vim /var/www/html/in ...