C#過濾掉腳本注入
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
正則表達式過濾HTML危險腳本內(nèi)容簡介:
在做一些 網(wǎng)站 (特別是bbs之類)時,經(jīng)常會有充許用戶輸入html樣式代碼,卻禁止腳本的運行的需求, 以達到豐富網(wǎng)頁樣式,禁止惡意代碼的運行。 當然不能用 htmlencode 和 htmldecode 方法,因為這樣連基本的html代碼會被 在做一些(特別是bbs之類)時,經(jīng)常會有充許用戶輸入html樣式代碼,卻禁止腳本的運行的需求, 以達到豐富網(wǎng)頁樣式,禁止惡意代碼的運行。
當然不能用 htmlencode 和 htmldecode 方法,因為這樣連基本的html代碼會被禁止掉。 我在網(wǎng)上搜索,也沒有找到好的解決辦法,倒是收集了一些腳本攻擊的實例: 1. <script>標記中包含的代碼 /本篇文章發(fā)表于 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代碼,返回則就是干凈的代碼了。
該文章在 2021/1/29 9:55:14 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |