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

C# HTML 內容過濾與 XSS 防護:Regex 方案與最佳實踐

     編輯:C# 入門

風險背景

使用者輸入的 HTML 若直接輸出,極易導致 XSS(跨站腳本攻擊)。必須移除或停用:<script>、事件屬性(onclick 等)、javascript: 協議、<iframe>、<frameset>、<img> 等標籤與屬性。

Regex 過濾實作(參考級)

using System.Text.RegularExpressions;

public static class HtmlSanitizer {
    private static readonly Regex[] _patterns = {
        //  (跨行、忽略大小寫)
        new Regex(@"", RegexOptions.IgnoreCase),
        // href="javascript:..." 或 href=javascript:...
        new Regex(@"href\s*=\s*[""']?\s*javascript\s*:", RegexOptions.IgnoreCase),
        // 所有 on* 事件屬性:onclick, onload, onerror...
        new Regex(@"\son\w+\s*=", RegexOptions.IgnoreCase),
        // 
        new Regex(@"", RegexOptions.IgnoreCase),
        // ...
        new Regex(@"", RegexOptions.IgnoreCase),
        //  (單標籤)
        new Regex(@"]*>", RegexOptions.IgnoreCase),
        // 

和

可選擇保留或移除,此處示範移除 new Regex(@"", RegexOptions.IgnoreCase) }; private static readonly string[] _replacements = { "", // script "href=\"#\"", // javascript: 連結改為錨點 " data-disabled-event=", // 事件屬性前綴停用 "", // iframe "", // frameset "", // img "" // p 標籤 }; public static string Sanitize(string html) { if (string.IsNullOrEmpty(html)) return html; for (int i = 0; i < _patterns.Length; i++) { html = _patterns[i].Replace(html, _replacements[i]); } return html; } }

關鍵 Regex 解析

模式說明
<script[\s\S]*?</script\s*>[\s\S] 匹配任意字元含換行;*? 非貪婪匹配最內層標籤對。
href\s*=\s*["']?\s*javascript\s*:涵蓋單雙引號、無引號、空白變化。
\son\w+\s*=\s 確保屬性邊界;\w+ 匹配事件名;\s*= 匹配等號前空白。

方案局限與進階建議

Regex 方案缺陷:
1. 無法處理巢狀/畸形標籤(如 <scr
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved