隱私與安全

網址參數有空白和中文時怎麼安全編碼?

組合搜尋連結或 API 查詢字串時,先把每個參數值分開做 URL 編碼,再放回參數名稱後方,避免中文、空白、& 與 = 被誤判為網址結構。

撰文: 3sec 編輯部 4 分鐘閱讀 1687 字

網址參數含有中文、空白、& 或 = 時,應先把「參數值」單獨編碼,再與參數名稱和其他參數組合。不要直接編碼整段網址,也不要把編碼後的字串當成隱私保護;它仍然可以被還原閱讀。

先分清楚網址結構與參數值

搜尋連結通常包含路徑、問號、參數名稱與參數值。真正需要處理的是使用者輸入的值,因為值裡的空白、中文或符號可能和網址本身的分隔符號衝突。

例如要搜尋「台北 咖啡 & 甜點」,可以先把這段文字視為 q 的值。先編碼這個值,再組成 https://example.test/search?q=編碼結果&lang=zh-TW。這樣原本屬於搜尋詞的 & 不會被瀏覽器誤認成下一個參數的起點,後面的 lang 也仍然是獨立參數。

相反地,若把完整網址貼進使用 encodeURIComponent 的工具,https://、?、& 與 = 等結構符號也會一起轉成百分比編碼。結果適合當成另一個參數的值,卻不能直接取代原本的完整網址。先拆值、再編碼、最後組裝,比對著一長串結果猜測可靠得多。

用 URL 編解碼工具處理一個值

開啟 URL 編解碼工具,一次只貼入一個參數值。頁面目前以 encodeURIComponent 即時產生結果,也能切換到解碼模式,並提供複製按鈕。

以 API 篩選條件為例,若參數名稱是 keyword,值是「A&B 測試」,操作流程可以固定成以下幾步:

  • 在文件或測試筆記保留原始值,避免之後只剩難讀的百分比字串。
  • 只把「A&B 測試」貼入編碼欄,不要連同 keyword= 一起貼入。
  • 複製輸出後,再組成 keyword=編碼結果。
  • 有第二個參數時,才在兩組完整參數之間加入 &。
  • 把最後的網址貼到無敏感資料的測試環境,確認系統收到的值仍是「A&B 測試」。

如果複製按鈕因瀏覽器權限沒有反應,可直接選取唯讀輸出欄的內容。這個工具處理貼上的文字,不會替你判斷哪一段是參數名稱、哪一段是值,也不會自動把多個欄位組成完整網址。

不要重複編碼,也不要混用加號規則

最常見的錯誤是同一個值被編碼兩次。第一次產生的 % 若再次被處理,會變成另一組百分比編碼;接收端只解碼一次時,就可能留下 %E... 之類的片段。交接時應標明資料目前是原文、已編碼一次,還是已完成解碼。

空白也容易造成混淆。有些表單格式會用 + 表示空白,但 encodeURIComponent 會用百分比形式處理空白。不要看到 + 就一律手動替換,也不要假設所有伺服器採用同一種表單解析規則;應以實際 API 或網站文件為準。

另一個問題是先手動替換部分字元,再把整段交給工具。這會混合兩套狀態,讓 %、+ 與原始符號難以追蹤。保留未處理原文,讓單一步驟完成一次編碼,之後再做反向檢查,通常比較容易找出錯誤。

編碼不會隱藏 Token 或個資

百分比編碼的目的,是讓文字能放進網址語法;它不是加密、遮蔽或存取控制。只要解碼一次,Email、查詢內容、內部路徑、API Token 或訂單編號仍可能完整出現。

因此不要把正式憑證貼進公開工具範例、聊天訊息或問題回報。需要示範時,先在工作副本把值換成 [TOKEN_REMOVED]、[USER_EMAIL] 等明確占位符,再對清理後的範例做編碼。若憑證已經出現在網址、瀏覽器紀錄、伺服器日誌或外部訊息中,僅修改後續範例不代表舊副本消失;應依服務的正式流程撤銷或輪替。

ToolboxHub 的元件只會編解碼輸入欄的文字並讓你複製結果,不會掃描敏感欄位、修改原始設定檔、撤銷密鑰,也不會證明網址可以安全公開。涉及公司資料時,仍要依內部規範與正式來源確認分享範圍。

用反向解碼完成交付前檢查

最後不要只檢查網址能不能開啟。把每個已編碼值從最終網址中取出,切換工具到解碼模式,再和原始值逐字比較。中文、空白、&、=、斜線與換行都應符合接收端預期。

接著確認參數數量和順序。若搜尋詞中的 & 被錯當成分隔符,通常會多出一個意外參數;若值被截斷,解碼結果會少字。API 測試還應查看伺服器實際收到的欄位,而不是只看瀏覽器位址列。

分享前再讀一次解碼後的明文,確認沒有真實 Token、帳號、Email、內部主機名稱或其他不該交付的資料。能成功解碼只是格式檢查通過,不代表內容已獲准公開。

常見問題

可以把完整網址直接貼進工具編碼嗎?

只有在「整段網址本身要成為另一個參數值」時才適合。若你正在建立可直接開啟的網址,應分別編碼各個參數值,保留 https://、路徑、?、& 與 = 的結構角色。

URL 編碼和加密有什麼不同?

URL 編碼是可逆的語法轉換,方便文字放進網址;加密需要密鑰與明確的安全設計。看到 %E7 之類的字串不代表資料被保護,解碼後仍是原文。

為什麼解碼時會顯示錯誤?

常見原因是 % 後沒有兩個有效的十六進位字元、字串被截斷,或內容混合了已編碼與未編碼片段。回到原始值重新做一次單一步驟編碼,比手動修補輸出安全。

同一個參數可以編碼兩次嗎?

除非接收端文件明確要求兩層封裝,否則不要重複編碼。一般查詢參數只需處理一次,並以反向解碼確認接收端可以還原成原始值。

工具會儲存或修改我的網址嗎?

目前元件在頁面中轉換輸入文字,沒有開啟或修改任何設定檔,也不會替你更新網站或 API。即使如此,正式密鑰和個資仍不應拿來當測試內容。