/// <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. css 图片 圆形显示区域

    css 图片 圆形显示区域 css 和 div 实现 方形图片 圆形显示 点击下载

  2. Activity之间的跳转

    /* * 触发按钮bt1跳转到另一个Activity */ bt1.setOnClickListener(new OnClickListener() { @Override public void o ...

  3. 2、vector的实现

            看侯捷老师的<STL源码剖析>有一段时间了,打算自己整理一下思路,试着实现一下.主要目的有两个:1.巩固自己对源码的理解,让自己更加深刻的体会其中各种机制的奥妙.别人的知识 ...

  4. JavaWeb限流QPS简易框架

    Java Web利用filter实现拦截请求,统计信息.并控制单台机器QPS. /** * 网络流量控制器 */ public class TrafficFilter implements Filte ...

  5. jQuery + css 公告从左往右滚动

    $(function() { // 公告滚动 $(".notice-content").textScroll(); }); /** * 从右往左滚动文字 * @returns {u ...

  6. cocos2d-x中的Tiled地图

    cocos2d-x中的瓦片地图是通过tiledMap软件制作的,存档格式是.tmx格式.此软件的使用步骤简单总结如下: (1)制作瓦片地图 1 打开软件,软件界面如下图. 2. 新建地图(文件-> ...

  7. Window10安装TestLink,以及登录mysql数据库的错误处理

    步骤一: 需要安装apache和mysql,但是我们这里仅仅是使用testlink,不关注其他,所以使用Vertrigoserv进行傻瓜式安装,安装完后,下载testlink解压,将解压后的文件放入D ...

  8. 程序A+B问题(一次输入和多次输入)

    这是早就会写的题,把它整理一下,比较容易. ➀一次输入数据,计算A+B   #include<stdio.h> #include<stdlib.h> int main() { ...

  9. javascript事件设计模式

    JavaScript事件设计模式 http://plkong.iteye.com/blog/213543 http://www.docin.com/p-696665922.html

  10. delphi 获取北京时间(使用XMLHTTP获取百度的时间,WebBrowser获取www.timedate.cn的时间)

    方法一: uses ComObj, DateUtils; function GetInternetTime: string; var XmlHttp: OleVariant; datetxt: str ...