許虎虎 開發者工具集
HTML 程式碼過濾

HTML 程式碼過濾(HTML Code Filtering)是指檢查和過濾 HTML 內容,以防止潛在的安全風險或不良的格式。在許多應用中,尤其是網站應用中,用戶可以提交 HTML 內容,但必須確保這些內容不包含潛在的危險代碼(如 XSS 攻擊代碼)或錯誤的標記結構。

HTML 程式碼過濾的目的通常是:

防止 XSS 攻擊(跨站腳本攻擊):攻擊者可能會通過在 HTML 中嵌入惡意 JavaScript 代碼來注入惡意腳本,進而竊取用戶信息或執行不當操作。
清理不必要的標籤和屬性:移除不必要的 HTML 標籤和屬性,保證頁面結構簡單且安全。
格式化不規範的 HTML:修正錯誤的 HTML 結構,如缺少閉合標籤、錯誤的嵌套等。
HTML 程式碼過濾的常見方式:
使用正則表達式過濾危險標籤和屬性: 可以利用正則表達式過濾掉特定的標籤或屬性。例如,過濾掉 <script> 標籤或 JavaScript 事件屬性(如 onclick, onmouseover 等)。

範例:

javascript

function filterHTML(input) {
// 去除 <script> 標籤和其內容
return input.replace(/<script[^>]*>([\S\s]*?)<\/script>/g, '');
}
使用 HTML 解碼器: 使用解碼器將可能的惡意字符進行編碼,防止它們被當作代碼執行。例如,將 < 轉換為 &lt;,> 轉換為 &gt;。

範例:

javascript

function escapeHTML(str) {
return str.replace(/[<>&'"/]/g, function (char) {
return {
'<': '&lt;',
'>': '&gt;',
'&': '&amp;',
"'": '&#39;',
'"': '&quot;',
'/': '&#x2F;',
}[char] || char;
});
}
使用白名單: 只允許某些指定的 HTML 標籤和屬性,過濾掉不允許的元素。這可以通過專門的庫來實現,如 DOMPurify,這樣可以保證只允許特定的標籤(如 <b>, <i>, <a> 等)。

範例:

javascript

// 使用 DOMPurify 過濾 HTML
var cleanHTML = DOMPurify.sanitize(dirtyHTML);
使用庫或框架: 很多現成的庫和框架都提供了 HTML 過濾功能,這些工具經過充分測試,能有效防範 XSS 攻擊,並對 HTML 進行清理。常見的庫包括:

DOMPurify:一個流行的 JavaScript 庫,用來消毒 HTML,防止 XSS 攻擊。
Sanitize-html:一個 Node.js 庫,用於清理 HTML,僅保留安全的標籤和屬性。

HTML 程式碼過濾的實際應用場景:
用戶提交的 HTML 內容: 在許多應用中,特別是論壇、博客、社交網站,用戶可能會提交 HTML 內容。這些內容需要過濾,以防止惡意代碼的注入。

API 回應的 HTML 內容: 如果從第三方 API 獲取 HTML 內容,為了確保不包含不安全的元素,也需要進行過濾。

處理用戶生成的 HTML: 比如在評論、文章編輯等頁面中,允許用戶生成 HTML 標籤的內容時,應該進行過濾,確保頁面不會遭受 XSS 攻擊。