asp.net 使用Response.Filter 過濾非法詞匯
更新時間:2010年03月02日 12:48:13 作者:
一般信息發(fā)布網(wǎng)站,論壇等均具有實(shí)現(xiàn)非法詞匯過濾功能,即當(dāng)用戶錄入非法詞匯時,進(jìn)行替換,使其無法顯示到頁面上,針對此種功能,通常采用的時,在讀取時,在讀到非法詞匯后,進(jìn)行替換。
另一種解決方案是在輸出時過濾掉非常詞匯,優(yōu)點(diǎn)是只要寫一次就好了,可以過濾整站的非法詞匯,缺點(diǎn)是,非法詞匯仍然存入到了數(shù)據(jù)庫中,呵呵,大家可以有針對性的選擇,本例用的是后者,起因在于當(dāng)初沒有做此功能,后來需要添加,這時又不想改原來代碼,所以就想了這個辦法,主要是采用了HttpResponse.Filter屬性來處理。具體代碼如下:
首先自定義一個類,來作為非法詞匯的過濾器
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);
//得到非法詞匯列表,這個可以在數(shù)據(jù)庫或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文件中,添加如下代碼:
[code]
public void Application_BeginRequest(){
Response.Filter = new ResponseFilter(Response.Filter);
}
OK,測試一下吧!
首先自定義一個類,來作為非法詞匯的過濾器
復(fù)制代碼 代碼如下:
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);
//得到非法詞匯列表,這個可以在數(shù)據(jù)庫或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文件中,添加如下代碼:
[code]
public void Application_BeginRequest(){
Response.Filter = new ResponseFilter(Response.Filter);
}
OK,測試一下吧!
您可能感興趣的文章:
- asp.net MVC利用ActionFilterAttribute過濾關(guān)鍵字的方法
- ASP.NET過濾類SqlFilter,防止SQL注入
- ASP.NET過濾HTML標(biāo)簽只保留換行與空格的方法
- ASP.NET過濾HTML字符串方法總結(jié)
- ASP.NET過濾器的應(yīng)用方法介紹
- ASP.NET中的URL過濾實(shí)現(xiàn)代碼
- Asp.net之?dāng)?shù)據(jù)過濾淺析
- asp.NET 臟字過濾算法 修改版
- asp.NET 臟字過濾算法
- asp.net 臟字典過濾問題 用正則表達(dá)式來過濾臟數(shù)據(jù)
- asp.net 過濾圖片標(biāo)簽的正則
- ASP.NET環(huán)境下為網(wǎng)站增加IP過濾功能
- asp.net 生成靜態(tài)時的過濾viewstate的實(shí)現(xiàn)方法
- asp.net MVC利用自定義ModelBinder過濾關(guān)鍵字的方法(附demo源碼下載)
相關(guān)文章
Asp .net 調(diào)用帶參數(shù)的存儲過程
本文主要介紹了Asp .net 調(diào)用帶參數(shù)的存儲過程的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03asp.net安全、實(shí)用、簡單的大容量存儲過程分頁
昨晚研究到2點(diǎn)多,對網(wǎng)絡(luò)上主流的分頁存儲過程大體看了一遍,但對安全以及如何使用很多文章都沒有過多的提及,而我要在這些文章的基礎(chǔ)上總結(jié)出一個比較實(shí)用的分頁存儲過程,方便大家在以后的項(xiàng)目中使用。2009-06-06使用DataGrid中擴(kuò)展ItemRenderer和HeaderRenderer進(jìn)行操作
這兩天在用Flex DataGrid做點(diǎn)東西,走了不少彎路,現(xiàn)將心得分享一下。2009-02-02asp.net(c#)下各種進(jìn)制間的輕松轉(zhuǎn)換(2進(jìn)制、8進(jìn)制、10進(jìn)制、16進(jìn)制)
在.NET Framework中,System.Convert類中提供了較為全面的各種類型、數(shù)值之間的轉(zhuǎn)換功能。2010-10-10ASP.NET Session的七點(diǎn)認(rèn)識小結(jié)
ASP.NET Session的使用當(dāng)中我們會遇到很多的問題,那么這里我們來談下經(jīng)常出現(xiàn)的一些常用ASP.NET Session的理解2011-07-07淺談ASP.NET常用數(shù)據(jù)綁定控件優(yōu)劣總結(jié)
這篇文章主要介紹了淺談ASP.NET常用數(shù)據(jù)綁定控件優(yōu)劣總結(jié),以便在實(shí)際的開發(fā)中選用合適的控件進(jìn)行數(shù)據(jù)綁定,以提高開發(fā)效率。2016-12-12asp.net下出現(xiàn)其中的組件“訪問被拒絕”的解決方法
asp.net下出現(xiàn)其中的組件“訪問被拒絕”的解決方法...2007-04-04