在 Letterhead 產生器中輸入的文字無法注入 SVG 標記。使用者輸入的每一個字串 —— 公司名稱、標語、地址行、電話、電子郵件和網站 —— 在放入 SVG 文位元組點之前都會經過 XML 跳脫,因此像 <、>、&、" 和 ' 這類字元會變成安全的實體,而非新的元素、屬性或指令碼處理常式。像 North & Pine 這樣的值會保持為一般文字顯示,而像 </text><script>alert(1)</script> 這種看似指令碼的輸入則會被中和為跳脫後的字元,SVG 解析器會將其視為無害內容。此工具絕不會將任何使用者值複製到事件處理常式、<style> 區塊、外部 <image>、<foreignObject>、超連結或任何可執行指令碼中。由於預覽窗格顯示的是下載時儲存的完全相同的 SVG 字串,因此跳脫處理是端對端可見的:你下載的檔案就是你所檢視的檔案。這項狹窄的契約 —— 受限的文字、一個經驗證的顏色、一個確定性的 SVG,以及相同的預覽和下載 —— 就是核心的安全性保證。以下是此工具如何強制執行該契約,以及如何使用它。

can text input inject svg markup when using letterhead generator
在 Letterhead 產生器中,文字輸入能否注入 SVG 標記?

SVG 標記注入的運作方式及其重要性

當工具將使用者文字轉換為 SVG 而未進行跳脫時,攻擊者 —— 或甚至是從剪貼簿意外貼上的內容 —— 可能會從文位元組點中逃逸,並新增執行指令碼、載入遠端資源或變更版面配置的元素。這項風險確實存在,因為 SVG 是一種即時的 XML 格式:解析器若在文字值中遇到結束標記,會將其後的內容視為標記而非可見字元。

常見的注入途徑包括:

  • 未跳脫的角括號,會關閉 <text> 元素並開啟新元素,例如 </text><script>...</script>。
  • 未跳脫的 & 符號,可讓數字字元參照如 &#x3C;script&#x3E; 得以生效。
  • 若文字被放入屬性中,屬性值內未跳脫的引號。
  • 若工具將使用者文字放入連結或屬性中,則會出現 JavaScript URL 或 on* 事件處理常式。
  • 若工具將 HTML 與 SVG 混合,則 <foreignObject> 中的 HTML。
  • 引入外部字型或指令碼的 <style> 區塊或遠端 CSS。

上述任何一種情況,都會將一個無害的 letterhead 產生器變成在檢視者瀏覽器中執行預存內容的媒介。修正方法並非事後過濾掉有害的字串 —— 而是必須在插入前對每個字串進行跳脫、限制字串的放置位置,並盡可能讓輸出樣板保持受限。

Letterhead 產生器如何阻擋標記注入

Letterhead 產生器的防禦建立在三個層次之上:輸入驗證、插入時跳脫,以及受限的輸出樣板。

首先,每個輸入都會被修剪並加以限制。公司名稱為必填,且上限為 80 個字元。標語、電話、電子郵件、網站以及每一行地址都有明確的字元限制。地址最多接受三行非空白的內容 —— 第四行非空白內容會被拒絕,而不是被悄悄隱藏,因此你在預覽中看到的內容永遠與實際內容相符。不允許的控制字元會被拒絕。強調顏色必須是完整的六位數 #RRGGBB 值;瀏覽器的色彩選擇器通常會提供該格式,而邏輯層會在產生 SVG 之前再次進行驗證。

其次,每個使用者字串在進入 SVG 之前都會進行 XML 跳脫。& 會變成 &amp;,小於符號會變成 &lt;,大於符號會變成 &gt;,雙引號會變成 &quot;,撇號則變成 &apos;。跳脫後,字串只會被放入普通的 SVG <text> 節點中 —— 絕不會放入屬性、URL 或指令碼內容中。

第三,輸出樣板受到限制。SVG 只有單一根元素,具有固定的 816 乘 1056 viewBox,以及相符的寬度與高度。樣板包含一條以所選強調顏色繪製的水平頁首分隔線、頁尾分隔線、依固定順序靠右對齊的聯絡資訊行(地址、電話、電子郵件、網站),以及一個在可用時重複公司名稱與網站的頁尾。其他前景與背景值皆為固定的中性設計顏色,以確保輸出保持可讀性;此工具不會計算品牌對比合規性,也不會聲稱單一選擇的強調色能滿足組織的無障礙政策。任何使用者值都不會被複製到事件處理常式、<style> 區塊、<foreignObject>、外部 <image> 參照、超連結或可執行指令碼中。空白的選填欄位不會保留虛擬內容。測試會斷言確切的跳脫結果,並要求只有單一 SVG 根元素,因此跳脫函式一旦發生迴歸,就會在建構階段失敗,避免出貨。

常見的注入途徑Letterhead 產生器的處理方式
使用 </text> 關閉文位元組點並新增元素使用者字串中的角括號在插入前會被跳脫為 &lt; 和 &gt;
類似 &#x3C;script&#x3E; 的數字實體參照使用者字串中的 & 符號會被跳脫為 &amp;
用引號從屬性中逃逸使用者字串絕不會被放入 SVG 屬性中
onclick、onload 及其他事件處理常式使用者字串絕不會被複製到事件處理常式屬性中
xlink:href 或 href 中的 JavaScript URL使用者字串絕不會被放入連結或影像參照中
<foreignObject> 中的 HTML樣板中不包含任何 <foreignObject> 元素
<style> 或 CSS 中的遠端指令碼或字型使用者字串絕不會被複製到 <style> 區塊中

正是這些機制的結合消除了風險。僅靠跳脫是不夠的,如果樣板仍允許使用者文字進入屬性或樣式區塊的話。僅靠受限的樣板也不夠,如果跳脫函式曾經遺漏任何字元的話。此工具同時承諾做到這兩者,再加上相同的預覽與下載,使安全性屬性能由任何讀取該檔案的人在瀏覽器中進行稽核。

輸入限制與驗證規則

欄位是否必填?限制遭到拒絕的情況
公司名稱是80 個字元空白、超過限制,或包含不允許的控制字元
標語否受限於明確的字元限制包含不允許的控制字元
地址行否最多 3 行非空白內容,每行皆受限制提交第四行非空白內容,或某行包含控制字元
電話否受限於明確的字元限制包含不允許的控制字元
電子郵件否受限於明確的字元限制包含不允許的控制字元
網站否受限於明確的字元限制包含不允許的控制字元
強調顏色是六位數 #RRGGBB 十六進位任何其他格式、缺少 #,或包含非十六進位字元

這些限制屬於版面配置與效能上的界線,而非正式的格式規則。強調顏色僅用於水平頁首分隔線與頁尾分隔線;畫布的其他部分則使用固定的中性設計顏色。如果你需要更完整的品牌系統、無障礙稽核或註冊商標的擺放位置,這些都是在此產生器之外另外進行的步驟。

安全地產生你的 Letterhead

  1. 輸入公司名稱,如果需要的話,再輸入簡短的標語。公司名稱為必填,且上限為 80 個字元。
  2. 新增最多三行非空白的地址行,以及你想顯示的聯絡欄位:電話、電子郵件、網站。任何留白的欄位只會直接從輸出中省略,而不會保留為佔位文字。
  3. 從色彩選擇器中挑選一個六位數的強調顏色,或貼上完整的 #RRGGBB 值。瀏覽器的色彩輸入通常會提供該格式;邏輯層會在產生 SVG 之前再次進行驗證。
  4. 選擇「Generate letterhead」。預覽窗格現在會顯示與下載按鈕將儲存完全相同的 SVG 字串。
  5. 檢查預覽中的每個可見細節:拼字、換行情形、聯絡資訊的正確性、強調色在白色背景上的對比,以及間距。
  6. 選擇「Download SVG」將檔案儲存到本機。檔名是根據你的公司名稱消毒後的版本所產生。
  7. 將 SVG 放入你的文件工作流程中 —— 例如向量編輯器、文書處理器、排版應用程式或印刷流程 —— 並在該下游工具中確認印表機縮放、邊距、品牌授權及無障礙等事項。

預覽與下載使用完全相同的 SVG 字串,因此你在瀏覽器中看到的跳脫結果,就是實際出貨檔案中的跳脫結果。編輯任何欄位都會清除先前的預覽,並撤銷其暫時性的物件 URL,因此舊的下載內容無法看似代表新的輸入。下載 URL 在使用後以及元件卸載時也會被撤銷。

下載之後:驗證並放置檔案

Letterhead 產生器會在你目前的瀏覽器分頁中建立檔案。它不會上傳你的公司資訊、將其儲存在帳戶中,或將其傳送到遠端算繪服務。然而,一旦檔案存到你的電腦上,產生器的限制便不再適用。816 乘 1056 的 viewBox 是為此樣板選擇的固定邏輯畫布;實際的尺寸取決於你稍後使用的編輯器、頁面設定、縮放比例與印表機。此工具不會檢查品牌授權、驗證郵寄地址、驗證電子郵件地址、稽核無障礙性,或驗證所列出的組織 —— 一份精美的 letterhead 並不能證明該公司存在或已授權該訊息。

因此,在你寄出正式信件之前:

  • 對公司名稱、標語、地址、電話、電子郵件和網站進行拼字檢查。
  • 檢查強調顏色在白色背景上的對比。產生器只會跳脫字串,並不會計算 WCAG 比率。
  • 確認你有權使用該公司名稱、任何另外加入的標誌,以及任何註冊商標。
  • 在你的目標應用程式(Word、InDesign、瀏覽器、PDF 轉換器)中開啟 SVG,並確認頁首在你計畫列印的頁面尺寸下位於預期位置。
  • 決定 letterhead 應該只出現在第一頁,還是在你的排版工具中重複出現在每一頁。

這些檢查屬於下游的文件工作流程,而非 letterhead 產生器的職責。

What the Letterhead Generator Does Not Do

It is worth being explicit about scope. The Letterhead Generator is not a trademark search, brand approval system, corporate registry, legal stationery service, postal validator, email verifier, accessibility audit, print preflight, or identity authentication tool. It is a utility that validates bounded text and one color, escapes every string for XML, serializes one deterministic SVG, shows that exact string in the preview, creates a local download after a direct action, and distinguishes logical canvas dimensions from physical print claims.

If you need any of the other functions — contrast checking, address validation, brand approval, identity authentication — those are separate problems with separate tools. A clean SVG that meets its narrow contract is not, by itself, a complete corporate identity program.

Bottom Line: Your Text Stays Text

To return to the original question: no, text input cannot inject SVG markup when using the Letterhead Generator. The combination of bounded inputs, complete XML entity escaping, text-only insertion points, a constrained template, and identical preview-and-download strings removes every common injection vector. Your company name, tagline, address, phone, email, and website appear as visible text in the output and nothing else.

A practical way to verify this for yourself: open the Letterhead Generator, paste a value into any field that contains <, >, &, ", or ', and generate. The characters will render as escaped entities in the preview and as inert text in the downloaded file. If you want a deeper walkthrough of how validation, preview, and download are wired together, see Create a Letterhead: Validate, Preview, and Download.

Related reading: Does a Letterhead Prove Company Identity or Authorization?.