清理 SVG 檔案的種種苦難

Hacker News·

這篇文章探討了 Scratch 在 SVG 清理程序中持續存在的安全漏洞,並指出透過不斷修補個別漏洞來增加複雜性的做法,從根本上來說是註定失敗且不可持續的。

背景

這篇文章深入探討了 Scratch 平台在處理使用者上傳的 SVG 檔案時所面臨的長期安全挑戰。由於 SVG 本質上是基於 XML 的標記語言而非單純的圖檔,Scratch 為了測量圖形邊界而將其解析並插入 DOM 的行為,導致了長達數年的跨站腳本攻擊(XSS)與隱私洩漏漏洞,即便多次引入 DOMPurify 或 CSS 解析器進行清理,依然難以完全杜絕攻擊者利用複雜的 CSS 規則或函式庫漏洞進行滲透。

社群觀點

Hacker News 的討論聚焦於 SVG 格式過於臃腫且功能過剩的本質。許多評論者指出,SVG 從來就不是一種純粹的影像格式,而是一套完整的標記語言,其危險程度與 HTML 不相上下。這也解釋了為何像 Google Slides 這樣的大型產品,即便用戶需求極高,仍長達十五年拒絕支援 SVG。社群普遍認為,試圖透過「清理」(Sanitization)來確保 SVG 安全是一場註定失敗的追逐戰,因為攻擊者總能找到新的方式繞過過濾規則,例如利用大小寫變體、內聯事件處理器或深層嵌套的 CSS 引用。

針對解決方案,討論中出現了兩種主要思維。一派觀點主張推動「受限的向量圖形格式」(如 SVG-ES 或 TinyVG),僅保留路徑與填充等核心繪圖功能,徹底移除腳本執行與外部資源載入的能力。這類觀點認為,大多數真實世界的應用場景只需要靜態圖形,而不需要那些「聰明但危險」的功能。然而,另一派意見則擔憂這種做法會破壞現有工具鏈的相容性,因為設計師常用的向量編輯軟體往往會產生複雜的標記,若強制轉譯或刪減功能,可能會導致動畫失效或渲染錯誤。

此外,部分技術專家提出應從瀏覽器底層或架構層面解決問題。有人建議瀏覽器應為內聯 SVG 提供類似 iframe 的沙盒屬性(sandbox attribute),讓開發者能以宣告式的方式禁用腳本與外部請求。也有人指出,內容安全政策(CSP)才是目前最可靠的防禦手段,透過在 iframe 中嵌入 meta 標籤設定嚴格的 CSP,可以在不依賴複雜清理邏輯的情況下,由瀏覽器強制執行安全限制,防止惡意代碼與外部伺服器通訊。

延伸閱讀

在討論中被多次提及的替代方案是 TinyVG(tinyvg.tech),這是一個旨在提供安全、二進位且易於解析的向量圖形標準。另外,關於如何利用 iframe 的 srcdoc 屬性配合 meta CSP 來建立安全的渲染環境,也是留言中推薦的實務技巧。

Hacker News

相關文章

  1. 告別 innerHTML,迎來 setHTML:Firefox 148 提供更強大的 XSS 防護

    2 個月前

  2. Roundcube 網頁郵件:SVG feImage 繞過圖片封鎖以追蹤郵件開啟

    3 個月前

  3. SVG 路徑編輯器

    3 個月前

  4. 供應鏈噩夢:Rust 將如何遭受攻擊以及我們能如何緩解風險

    17 天前

  5. FFmpeg drawvg 濾鏡:透過 VGS 腳本渲染向量圖形

    大約 1 個月前

其他收藏 · 0