程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 用正則表達式過濾腳本的一些研究(asp.net + C#)

用正則表達式過濾腳本的一些研究(asp.net + C#)

編輯:.NET實例教程
在做一些網站(特別是BBS之類)時,經常會有充許用戶輸入Html樣式代碼,卻禁止腳本的運行的需求, 以達到豐富網頁樣式,禁止惡意代碼的運行。
當然不能用 HtmlEncode 和 HtmlDecode 方法,因為這樣連基本的Html代碼會被禁止掉。
我在網上搜索,也沒有找到好的解決辦法,倒是收集了一些腳本攻擊的實例:
1. <script>標記中包含的代碼
2. <a href=Javascript:...中的代碼
3. 其它基本控件的 on...事件中的代碼
4. iframe 和 frameset 中載入其它頁面造成的攻擊
有了這些資料後,事情就簡單多了,寫一個簡單的方法,用正則表達式把以上符合幾點的代碼替換掉:
public string wipeScript(string Html)
{
System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<script[\s\S]+</script *>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Regex regex2 = new System.Text.RegularExpressions.Regex(@" href *= *[\s\S]*script *:",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Regex regex3 = new System.Text.RegularExpressions.Regex(@" on[\s\S]*=",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Regex regex4 = new System.Text.RegularExpressions.Regex(@"<iframe[\s\S]+</iframe *>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
System.Text.RegularExpressions.Regex regex5 = new System.Text.RegularExpressions.Regex(@"<frameset[\s\S]+</frameset *>",System.Text.RegularExpressions.RegexOptions.IgnoreCase);
html = regex1.Replace(Html, ""); //過濾<script></script>標記
html = regex2.Replace(Html, ""); //過濾href=Javascript: (<A>) 屬性
html = regex3.Replace(Html, " _disibledevent="); //過濾其它控件的on...事件
html = regex4.Replace(Html, ""); //過濾iframe
html = regex5.Replace(Html, ""); //過濾frameset
return Html;
}
此方法輸入可能包含腳本的Html代碼,返回則就是干淨的代碼了。
我做過一些簡單的測試,可以滿中要求,只是還存在幾個疑問:
以上考濾的情況是否比較完善, 還存在其它的腳本攻擊手段嗎?
是否會有其它更好的解決辦法?
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved