用Regex過濾指令碼的一些研究(asp.net + C#)

來源:互聯網
上載者:User
asp.net|指令碼|正則 在做一些網站(特別是BBS之類)時,經常會有充許使用者輸入html樣式代碼,卻禁止指令碼的啟動並執行需求, 以達到豐富網頁樣式,禁止惡意代碼的運行。
當然不能用 HtmlEncode 和 HtmlDecode 方法,因為這樣連基本的html代碼會被禁止掉。
我在網上搜尋,也沒有找到好的解決辦法,倒是收集了一些指令碼攻擊的執行個體:
1. <script>標記中包含的代碼
2. <a href=javascript:...中的代碼
3. 其它基本控制項的 on...事件中的代碼
4. iframe 和 frameset 中載入其它頁面造成的攻擊
有了這些資料後,事情就簡單多了,寫一個簡單的方法,用Regex把以上符合幾點的代碼替換掉:
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代碼,返回則就是乾淨的代碼了。
我做過一些簡單的測試,可以滿中要求,只是還存在幾個疑問:
以上考濾的情況是否比較完善, 還存在其它的指令碼攻擊手段嗎?
是否會有其它更好的解決辦法?


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。