授權政策正規化

此頁面描述授權原則中所有支援的正規化。正規化後的請求將用於評估授權原則以及最終發送到後端伺服器的請求。

更多資訊,請參考授權正規化最佳實務

這適用於paths 欄位notPaths 欄位

1. 單一百分比編碼字元 (%HH)

Istio 將單個百分比編碼的字元正規化如下(正規化只發生一次,不會進行雙重解碼)

百分比編碼字元(不區分大小寫)正規化結果注意事項啟用
%00不適用請求將永遠被拒絕,並返回 HTTP 代碼 400不適用
%2d-(破折號)預設使用正規化選項 BASE 啟用
%2e.(點)預設使用正規化選項 BASE 啟用
%2f/(正斜線)預設停用,可以使用正規化選項 DECODE_AND_MERGE_SLASHES 啟用
%30 - %390 - 9(數字)預設使用正規化選項 BASE 啟用
%41 - %5aA - Z(大寫字母)預設使用正規化選項 BASE 啟用
%5c\(反斜線)預設停用,可以使用正規化選項 DECODE_AND_MERGE_SLASHES 啟用
%5f_(底線)預設使用正規化選項 BASE 啟用
%61 - %7aa - z(小寫字母)預設使用正規化選項 BASE 啟用
%7e~(波浪號)預設使用正規化選項 BASE 啟用

例如,路徑為 /some%2fdata/%61%62%63 的請求將被正規化為 /some/data/abc

2. 反斜線 (\)

Istio 會將反斜線 \ 正規化為正斜線 /。例如,路徑為 /some\data 的請求將被正規化為 /some/data

此功能預設使用正規化選項 BASE 啟用。

3. 多個正斜線 (//, /// 等)

Istio 會將多個正斜線合併為單個正斜線 (/)。例如,路徑為 /some//data///abc 的請求將被正規化為 /some/data/abc

此功能預設停用,但可以使用正規化選項 MERGE_SLASHES 啟用。如果啟用,該路徑可能無法與具有路徑範本運算子 {**} 的路徑匹配。例如,一旦啟用 MERGE_SLASHES/some/data//abc 將不再匹配 /some/data/{**}/abc,因為該路徑將被正規化為 /some/data/abc

4. 單點和雙點 (/./, /../)

Istio 將根據 RFC 3986 解析單點 /./ 和雙點 /../。單點將被解析為當前目錄,雙點將被解析為父目錄。

例如,/public/./data/abc/../xyz 將被正規化為 /public/data/xyz

此功能預設使用正規化選項 BASE 啟用。

5. 帶有查詢的路徑 (/foo?v=1)

Istio 授權原則在與路徑比較時,會移除問號 (?) 之後的所有內容。請注意,後端應用程式仍會看到查詢。

此功能預設啟用。

這適用於 methodsnotMethods 欄位。

1. 方法不是大寫

如果 HTTP 請求中的動詞不是大寫,Istio 將拒絕請求並返回 HTTP 400 錯誤。

此功能預設啟用。

這適用於 request.headers[<header-name>] 條件中指定的標頭名稱。

1. 不區分大小寫比對

Istio 授權原則將以不區分大小寫的方式比較標頭名稱。

此功能預設啟用。

2. 重複標頭

Istio 會將重複的標頭合併為單個標頭,並使用逗號作為分隔符號連接所有值。

授權原則將對合併後的標頭進行簡單的字串比對。例如,標頭為 x-header: foox-header: bar 的請求將合併為 x-header: foo,bar

此功能預設啟用。

3. 標頭名稱中的空白

如果標頭名稱包含任何空格,Istio 將拒絕請求並返回 HTTP 400 錯誤。

此功能預設啟用。

這些資訊對您有幫助嗎?
您有任何改進建議嗎?

感謝您的回饋!