先說結論
往網頁裡貼上一段文字,後果可以和往它那裡上傳一個檔案一模一樣重。感覺不像,是因為這個動作是從一個安全的地方借來的:在自己的兩個視窗之間,貼上把文字從一個你說了算的地方挪到另一個你說了算的地方。而在網頁上,第二個地方是一個指令碼讀得到的文字框。接下去發生什麼,全由頁面決定,不由動作決定。
長成貼上模樣的工具,不少把工作做在伺服器上:頁面把你的文字發出去,伺服器格式化、校驗或者對比,結果再送回來。螢幕上沒有任何東西告訴你,你用的是哪一種。文字框長得一樣,「格式化」按鈕也長得一樣。差別就是一次網路請求,不去找就看不見。
貼上的東西究竟裝著什麼
落進線上工具的,很少是散文。那是某個人吃飯的傢伙事,而且體裁很要命:計算機世界裡最敏感的幾類字串,恰恰就是深更半夜被貼進格式化工具的那些。
- 配置檔案的存在,就是為了裝那些不能寫死在程式裡的東西。那些東西是資料庫密碼、API 金鑰、簽名金鑰。整段貼進去的配置,把它們全捎上了。
- 日誌和報錯堆疊裝著網址裡的會話令牌、信箱地址、內網機器名,偶爾還有一段帶著誰的個人資訊的請求內容。
- API 的回應是生產資料的快照。真實的客戶,真實的餘額,被貼到一個讀起來順手的地方。
- 一切長得像 base64 的東西,既然被貼進解碼器,多半當初就是因為要緊才編碼的:除錯中的令牌,證書,認證頭。
從陌生人伺服器上過了一道的金鑰,發現的那一刻就得按洩露算:吊銷,重發。在生產系統上,這是誰都沒排進日程的一個下午。要說的不是格式化網站在收割憑據,而是你無從知道一臺伺服器記了什麼。一個你排除不了洩露可能的秘密,就是一個必須換掉的秘密。
這工作根本不需要你的文字出門
一個技術事實就能把問題了結:格式化、校驗、轉換、對比文字,是計算機世界裡最輕省的幾樣工作。解析 JSON,給 XML 縮排,對比兩個檔案,編碼 base64,瀏覽器幾毫秒就做完,就在本地,而且多年前就做得到。伺服器幫不上任何忙。一個貼上模樣的工具要是上傳你的文字,那是架構的陳年舊習,或者是運營者圖省事,絕不是工作本身的需要。
這個站的文字工具就是反例。JSON 格式化工具解析、格式化並轉換 JSON、XML、HTML、CSS 和 YAML;文字對比工具把兩段文字的每一處差別逐行逐詞標出來;Base64 編解碼工具在文字和它的各種編碼之間雙向走。三個都在你的機器上跑,你貼上的東西無處可去,這些頁面裡沒有一條能把它發出去的程式碼路徑。
其中兩個已經有作伴的指南:不上傳就格式化 JSON,還有對比兩個 JSON 檔案。
怎麼看出你用的是哪一種
檢查的辦法和檔案工具一樣,全文寫在上傳那一頁。按貼上的口徑說個短版:
- 拔網線。把頁面開啟,斷網,貼上,按按鈕。本地工具接著做,伺服器工具當場停。三十秒,不要任何本事,也做不了假。
- 按下「格式化」的同時盯住網路面板。那一刻發出去一條請求,大小和你貼上的差不多,那就是你貼上的東西在出門。沒有請求,就沒有上傳。
- 提防熱心的添頭。「分享這段程式碼」的按鈕、跨裝置同步的貼上歷史、發給同事的連結,件件都得先把文字存上伺服器才辦得到。功能就是招供:能把你貼上的東西亮給別人看的頁面,就是把它留下了。
還有一個習慣,比三條檢查都頂用:少貼。校驗一份配置的格式,用不著真密碼,"REDACTED" 解析出來一模一樣。至於貼上的東西本身就是秘密的那種情形,規矩縮成更短的一句:世上配收到密碼的頁面只有一個,就是那個密碼所屬的登入頁。