首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

使用 Response.Filter 過濾非法詞彙

     編輯:關於ASP.NET

方案:輸出流過濾

優點:寫一次套用全站;缺點:非法詞仍入庫。適合事後補救不想改原代碼的情況。

自訂 Stream 過濾器

public class ResponseFilter : Stream
{
    Stream responseStream;
    long position;
    StringBuilder html = new StringBuilder();

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

    // 必須覆寫的抽象成員:CanRead/CanSeek/CanWrite/Close/Flush/Length/Position/Seek/SetLength/Read
    // 略...

    public override void Write(byte[] buffer, int offset, int count)
    {
        string sBuffer = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
        // 非法詞列表可從 DB 或 Web.Config 讀取
        string pattern = @"(非法詞彙1|非法詞彙2|非法詞彙3)";
        foreach (string w in pattern.Split(new[]{"|"}, StringSplitOptions.RemoveEmptyEntries))
            sBuffer = sBuffer.Replace(w, "**");
        byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(sBuffer);
        responseStream.Write(data, 0, data.Length);
    }
}

Global.asax 掛載

public void Application_BeginRequest()
{
    Response.Filter = new ResponseFilter(Response.Filter);
}

所有輸出經過 Write 替換非法詞後再寫入原始回應流,全站自動生效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved