Top 10 測試目標URL 與特殊字元

百分比編碼被二次編碼

網址列的 next 參數被編碼了兩次。解碼一次跟解碼兩次,答案完全不同。

解碼次數決定答案

試試看

點下面這個連結,網址會帶 ?next=%252Fadmin%252Fdashboard——那是 %2Fadmin%2Fdashboard 又被編碼了一次。

開啟帶雙重編碼參數的版本

這一頁在測什麼

解碼一次%252Fadmin%252Fdashboard%2Fadmin%2Fdashboard——看起來還是編碼過的,不是一個乾淨的路徑。
解碼兩次再解一次 → /admin/dashboard——如果有檢查「這個值不可以是 /admin 開頭」,這個檢查如果只做了一次 decodeURIComponent,這個值會通過檢查,因為它看起來還不是 /admin 開頭。
為什麼危險過濾器在編碼層做檢查、瀏覽器或後端在使用前又多解碼一次——兩邊對「這個字串現在是什麼」的認知不一致,就是雙重編碼繞過的原理。
平台必須不做的事:只對輸入解碼一次就判斷它安全或合法,或是重複解碼直到看起來「正常」為止——正確做法是固定解碼次數(通常一次),拒絕解碼後仍含 % 的值。