一般信息发布网站,论坛等均具有实现非法词汇过滤功能,即当用户录入非法词汇时,进行替换,使其无法显示到页面上,针对此种功能,通常采用的时,在读取时,在读到非法词汇后,进行替换。这样做的好处是不用将非法词汇存入数据库,缺点是要在每次读取时都要进行替换。另一种解决方案是在输出时过滤掉非常词汇,优点是只要写一次就好了,可以过滤整站的非法词汇,缺点是,非法词汇仍然存入到了数据库中,呵呵,大家可以有针对性的选择,本例用的是后者,起因在于当初没有做此功能,后来需要添加,这时又不想改原来代码,所以就想了这个办法,主要是采用了HttpResponse.Filter属性来处理。具体代码如下:

首先自定义一个类,来作为非法词汇的过滤器

using System;
using System.Text;
using System.IO;
public class ResponseFilter : Stream
{
    #region properties

Stream responseStream;
    long position;
    StringBuilder html = new StringBuilder();

#endregion

#region constructor

public ResponseFilter(Stream inputStream)
    {
        responseStream = inputStream;
    }

#endregion

#region implemented abstract members

public override bool CanRead
    {
        get { return true; }
    }

public override bool CanSeek
    {
        get { return true; }
    }

public override bool CanWrite
    {
        get { return true; }
    }

public override void Close()
    {
        responseStream.Close();
    }

public override void Flush()
    {
        responseStream.Flush();
    }

public override long Length
    {
        get { return 0; }
    }

public override long Position
    {
        get { return position; }
        set { position = value; }
    }

public override long Seek(long offset, System.IO.SeekOrigin direction)
    {
        return responseStream.Seek(offset, direction);
    }

public override void SetLength(long length)
    {
        responseStream.SetLength(length);
    }

public override int Read(byte[] buffer, int offset, int count)
    {
        return responseStream.Read(buffer, offset, count);
    }

#endregion

#region write method

public override void Write(byte[] buffer, int offset, int count)
    {
        string sBuffer = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);

//得到非法词汇列表,这个可以在数据库或Web.Config中读取出来
        string pattern = @"(非法词汇1|非法词汇2|非法词汇3)";
        string[] s = pattern.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);

foreach (string s1 in s)
        {
            sBuffer = sBuffer.Replace(s1, "**");
        }

byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(sBuffer);
        responseStream.Write(data, 0, data.Length);
    }

#endregion
}

然后再Global.asax文件中,添加如下代码:

view plaincopy to clipboardprint?
<STRONG class=c>//这个适合多个页一次过处理  
</STRONG><STRONG class=k>public</STRONG> <STRONG class=k>void</STRONG> Application_BeginRequest()   
{  
    <STRONG class=k>string</STRONG> path = HttpContext.Current.Request.Path.ToLower();  
    <STRONG class=k>string</STRONG>[] paths = <STRONG class=k>new</STRONG> <STRONG class=k>string</STRONG>[]  
    {  
        <STRONG class=s>"/aa/"</STRONG>,<STRONG class=s>"/bb/"</STRONG>  
    };  
    <STRONG class=k>foreach</STRONG> (<STRONG class=k>string</STRONG> item <STRONG class=k>in</STRONG> paths)  
    {  
        <STRONG class=k>if</STRONG> (path.StartsWith(item))  
        {  
            Response.Filter = <STRONG class=k>new</STRONG> ResponseFilter(Response.Filter);  
            <STRONG class=k>break</STRONG>;  
        }  
    }  
}

//这个适合多个页一次过处理
public void Application_BeginRequest()
{
    string path = HttpContext.Current.Request.Path.ToLower();
    string[] paths = new string[]
    {
        "/aa/","/bb/"
    };
    foreach (string item in paths)
    {
        if (path.StartsWith(item))
        {
            Response.Filter = new ResponseFilter(Response.Filter);
            break;
        }
    }
}
或者重写某页的Render方法

view plaincopy to clipboardprint?
<STRONG class=k>protected</STRONG> <STRONG class=k>override</STRONG> <STRONG class=k>void</STRONG> Render(HtmlTextWriter writer)  
{  
    StringWriter strWriter = <STRONG class=k>new</STRONG> StringWriter();  
    <STRONG class=k>base</STRONG>.Render(<STRONG class=k>new</STRONG> HtmlTextWriter(strWriter));  
    <STRONG class=k>string</STRONG> html = strWriter.ToString();  
    html = Util.ReplaceInvalidKeyword(html);  
    writer.Write(html);  
}

使用Response.Filter过滤非法词汇相关推荐

  1. Filter过滤词汇

    Filter过滤词汇(增强返回) 1.首先Filter使用注解设置拦截路径,将工程下的所有资源请求都拦下来 2.登录Servlet,在URL上传送数据,并在Servlet上的Post或是Get上对传送 ...

  2. dedeCMS如何进行关键词过滤替换和屏蔽非法词汇?

    dedeCMS系统模板安装完毕之后,如何进行非法词汇的屏蔽,以及关键词过滤替换呢? 一.所需修改文件路径: C:\wamp64\www\install\config.cache.inc.php 二.对 ...

  3. 过滤器-过滤敏感词汇

    首先要准备好敏感词库,敏感词汇的格式如下: |1 买枪|2 四大舰队|3 其中1代表禁用词:禁用词将禁止提交,2代表审核次:将以高亮字体显示,3代表过滤词:将替换为****, 过滤器代码实现如下: p ...

  4. PHP 一个可以过滤非法脚本的函数

    这里提供一个过滤非法脚本的函数: function RemoveXSS($val) {     // remove all non-printable characters. CR(0a) and L ...

  5. 验证多个Filter过滤一个资源时执行顺序

    当有多个Filter过滤一个资源时,执行顺序到底是怎样? 如下测试: 定义两个Filter,FirstFilter,SecondFilter,它们过滤同一个index.jsp页面,并且SecondFi ...

  6. springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径

    springboot 通过@WebFilter(urlPatterns )配置Filter过滤路径,没有配置/*,输入任何路径都能进过滤器 2019年04月25日 12:51:33 peigui.hu ...

  7. Spring Boot使用过滤器过滤非法URL

    一.场景 使用Spring Boot框架,通过过滤器过滤不存在的URL,将这些非法URL转发或重定向到自定义错误页面. 二.实现 API: WebApplicationContext:用于获取全局信息 ...

  8. TDI Filter 过滤驱动

    By Fanxiushu  2013, 引用和转载请注明原作者 为了让大家有兴趣阅读下去, 举个正在使用的可能大家都比较熟悉的例子: 360 的安全卫士里,有个流量防火墙的功能, 它可以监视每个进程的 ...

  9. Elasticsearch query和filter过滤有什么不同

    1. 概述 在使用DSL进行Elasticsearch的查询中,通常我们都是使用query进行过滤匹配,比如下面这段代码 GET /my_index/_search {"query" ...

最新文章

  1. java i18n实例_Java SpringMVC实现国际化整合案例分析(i18n) 专题
  2. mathematica趣题解答
  3. Cisco呼吁Arista停止在美国销售产品
  4. 全链路监控方案概述与比较
  5. 图解排序算法(四)之归并排序
  6. java 根据时间范围自动算间隔_Java根据开始时间结束时间计算时间间隔 x年x月x日...
  7. php upload 缓存_php-使用vich_uploader的liip_imagine无法创建缓存
  8. iOS开发之注册推送通知权限
  9. 服务器宕机可能的原因以及服务器宕机解决办法
  10. java判断小数位数_java-使用BigDecimal确定小数位数
  11. The APR based Apache Tomcat Native library which allows optimal performance in production
  12. [转帖]16nm国内最先进 兆芯展示x86 KX-6000八核处理器
  13. 报时功能_厦门宝藏 | 海关大钟悠扬的鸣曲报时,承载着老厦门人无数的记忆!...
  14. Android5.1 -Recents分析
  15. 使用aireplay-ng抓握手包笔记
  16. ZeroDivisionError:Integer division or modulo by zero
  17. Excel的数据可视化和Python的有什么不同?
  18. PQ(product quantization) 算法---(二)
  19. C:L1-051 打折 (5分)
  20. 乐鑫 AT 固件初体验 - ESP32

热门文章

  1. 信息学奥赛一本通(1010:计算分数的浮点数值)
  2. 打击犯罪(信息学奥赛一本通-T1386)
  3. java pk .net_Java与.Net大PK
  4. 8.0ble设备 android_蓝牙自动连入附近设备?海凌科解答不同蓝牙区别
  5. 初一数学计算机教案,初一数学教案
  6. Transformer如何并行化? self-attention公式中的归一化有什么作用?
  7. 【PyTorch】PixelShuffle
  8. StyleGAN_LatentEditor-master(Image2StyleGAN):如何将图像嵌入到 StyleGAN 潜在空间中?代码运行过程
  9. jQuery的实现原理
  10. 判断域名来源的操作【window.location.host.indexOf(‘域名关键词‘)】 - 代码篇