有些系統仍會產生 https://user:pass@host/... 這種格式的網址。這裡只寫成純文字展示,不是真的可點的連結——URL 裡的憑證是憑證,不是位址的一部分。
https://demo:not-a-real-password@example.invalid/order/55120
demo:not-a-real-password 是刻意寫的假值;example.invalid 是保留給文件用途、永遠不會被解析的網域(RFC 2606)。
| userinfo 不是路徑的一部分 | user:pass@ 這一段叫 userinfo,語意是「用這組帳密去存取後面的主機」,不是網址身分的一部分。 |
|---|---|
| 為什麼必須拒絕 | 接受這種格式等於把一組明文憑證存進監控設定、log、甚至通知內容裡——這是憑證外洩,不是位址正規化的問題。 |
normalizeSafeHttpUrl 該做的事 | 偵測到 URL 含 userinfo 時應直接拒絕整個輸入,不得剝掉 userinfo 後繼續處理剩下的網址,也不得把帳密的任何片段寫進任何持久化的欄位。 |