HTML 轉義/反轉義

用於安全呈現文字的 HTML 實體轉義/反轉義工具,有助於降低 XSS 風險

使用說明

🚀 快速開始

  • 在文字框輸入內容(HTML 或已轉義文字)
  • 選擇「編碼」或「解碼」
  • 點擊按鈕開始轉換,結果顯示於同一文字框
  • 點擊「複製」以重用結果

📌 常見使用情境

  • 使用者評論:轉義使用者提交的評論內容,防止 XSS 攻擊
  • 部落格文章:在文章中顯示 HTML 程式碼範例
  • 論壇貼文:安全顯示使用者發布的內容
  • 聊天訊息:防止惡意程式碼透過聊天功能傳播
  • 表單資料:處理和顯示表單提交的資料
  • 程式碼展示:在網頁中展示 HTML/JavaScript 程式碼片段

🎛️ 轉義規則與實體

  • 常見字元:< > & " '(斜線 / 一般不必;視情境而定)
  • 實體格式:特殊字元轉換為 &entity; 或 &#code; 格式,如 < 轉為 < 或 <
  • 屬性轉義:引號轉換為 ",保護 HTML 屬性值安全
  • 腳本防護:<script> 標籤自動轉義,防止 JavaScript 注入
  • 標籤處理:<div> 轉換為 <div>,避免被瀏覽器解析

🧭 使用建議

  • 上下文轉義:根據輸出位置選擇合適的轉義策略
  • 伺服器端處理:關鍵安全轉義應在伺服器端進行
  • 雙重檢查:轉義後檢查輸出,確保沒有遺漏
  • 使用函式庫:生產環境建議使用成熟的轉義函式庫而非手動處理
  • 預覽檢查:轉義後可以在瀏覽器控制台預覽實際顯示效果

⚠️ 限制與相容性

  • 本工具不是 Sanitizer:不會移除腳本/事件/危險協定,需配合內容淨化使用
  • 不完全防護:僅轉義不能防止所有 XSS,需配合其他安全措施
  • 上下文依賴:不同位置需要不同的轉義策略(HTML 內容、屬性、JavaScript、CSS)
  • 為保持頁面流暢,大量文字轉義可能採取簡化處理,建議分段

🔒 隱私與安全

  • 所有處理均在您的瀏覽器內完成,資料不會離開您的裝置

❓ 常見問題

什麼是 XSS 攻擊?

XSS(跨站腳本攻擊)是攻擊者透過注入惡意腳本到網頁中,竊取使用者資訊或執行惡意操作。HTML 轉義是防禦 XSS 的基本手段

什麼時候需要 HTML 轉義?

顯示任何使用者輸入的內容時都需要轉義,包括評論、留言、表單資料等。只要內容可能包含 HTML 標籤就需要轉義

< 和 < 有什麼區別?

兩者都表示 <(小於號)。&amp;lt; 為命名實體(lt=less‑than),&amp;#60;/&amp;#x3C; 為數字/十六進位實體。於現代 HTML 行為相同:需可讀性則用 &amp;lt;;在不支援命名實體或需表示任意字元/跨標記語言時用 &amp;#60;/&amp;#x3C;。末尾分號務必保留(如 &amp;lt;),省略可能與後續字元黏連而被誤解析,例如「&amp;notin」會被視為「&amp;not;」+「in」→「¬in」。

轉義能防止所有 JavaScript 注入嗎?

不能。HTML 轉義只在 HTML 上下文有效。在 JavaScript、CSS、URL 等上下文中需要不同的轉義方法

為什麼有時會看到 &amp;amp;lt; 這樣的雙重轉義?

這是因為內容被轉義了兩次。第一次 &lt; 變成 &amp;lt;,第二次 &amp; 又被轉義成 &amp;amp;,結果變成 &amp;amp;lt;。應避免重複轉義

如何允許部分安全的 HTML 標籤?

請進行「淨化(Sanitization)」而非僅轉義:以允許清單保留安全標籤/屬性並過濾協議。建議僅保留 p/br/ul/ol/li/a/strong/em/code/pre/blockquote/h1–h3;a 只允許 href/title/target(協議限 http/https/mailto/tel),img 只允許 src/alt;移除 style 與所有 on* 事件。推薦使用 DOMPurify/sanitize‑html,盡量於伺服器端淨化;切勿將未淨化內容放入 innerHTML/dangerouslySetInnerHTML,純文字使用 textContent

HTML 轉義/反轉義 - 線上 HTML 實體轉換工具 - CrateX.app