Web 請求元件設定 - AWS WAF、AWS Firewall Manager 與 AWS Shield Advanced

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Web 請求元件設定

本節說明可以針對檢查 Web 請求元件的規則陳述式指定的設定。如需有關使用方式的資訊,請參閱個別規則陳述式。

請求元件

請求元件會指定供 AWS WAF 檢查的 Web 請求部分。您可以為標準規則陳述式指定此項目,在 Web 請求內尋找模式的陳述式。這些項目包括規則運算式模式比對、SQL injection 攻擊和大小限制條件陳述式。

除非另有說明,否則如果 Web 要求沒有規則陳述式中指定的要求元件,則要求會導致不符合規則。

注意

您可以為每個需要它的規則陳述式指定單一請求元件。若要檢查請求的多個元件,請為每個元件建立規則陳述式。

AWS WAF 主控台和 API 文件會在下列位置提供這些設定的指引:

  • 規則建置器在主控台上 — 在Statement設定中,選擇您要在檢查在下方對話請求元件

  • API 陳述式內容FieldToMatch

以下是用於要檢查的 Web 請求部分的選項:

要檢查的請求部分的選項

標頭

特定的請求標頭。對於此選項,您也可以在 Header type (標頭類型) 欄位中選擇標頭的名稱,例如 User-AgentReferer

HTTP 方法

HTTP 方法,指出要求 Web 請求來源執行的操作類型。

查詢字串

出現在 ? 字元後的 URL 部分 (如果有)。

注意

對於跨網站指令碼比對條件,我們建議您選擇 All query parameters (所有查詢參數),而不是 Query string (查詢字串)。選擇所有查詢參數在基本成本中增加了 10 個 WSU。

單一查詢參數

您已定義為查詢字串一部分的任何參數。AWS WAF 會檢查您指定的參數值。

對於此選項,您也可以指定 Query parameter name (查詢參數名稱)。舉例來說,如果 URL 為 www.xyz.com?UserName=abc&SalesRegion=seattle,您可以為名稱指定 UserNameSalesRegion。名稱的長度上限為 30 個字元。名稱不區分大小寫,因此如果您指定 UserName 做為名稱,則 AWS WAF 會比對包括 usernameUsERNameUserName 所有變體。

如果查詢字串包含您指定之名稱的多個執行個體,AWS WAF檢查匹配的所有值,使用OR邏輯。例如,在 URL www.xyz.com?SalesRegion=boston&SalesRegion=seattle 中,AWS WAF 會評估您針對 bostonseattle 指定的名稱。如果其中一個相符,則檢查會是相符。

所有查詢參數

類似於 Single query parameter (單一查詢參數),但 AWS WAF 會檢查查詢字串內所有參數的值。例如,如果 URL 為 www.xyz.com?UserName=abc&SalesRegion=seattle,則 AWS WAF 會在 UserNameSalesRegion 的值符合比對檢查準則時觸發比對。

選擇此選項會在基本成本中增加 10 個 wCU。

URI 路徑

URL 識別資源的一部分,例如 /images/daily-ad.jpg。如果您DAND使用這個選項的文字轉換AWS WAF不會標準化 URI 並檢查它,就像在請求中從客戶端接收它一樣。

Body

緊接在請求標頭後面的請求部分。這包含 Web 請求所需的任何其他資料,例如,來自表單的資料。

  • 在主控台中,您可以在請求選項choiceBody (本文),方法是選取內容類型choice純文字

  • 在 API 中,在規則的FieldToMatch規格,請指定Body將請求內文作為純文檢查。

注意

只有請求內文的前 8 KB (8,192 位元組) 會轉送至 AWS WAF 進行檢查。如果您不需要檢查超過 8 KB,則可以透過將檢查 Web 請求內文的陳述式與對請求內文執行 8 KB 大小上限的大小約束規則陳述式結合,以保證不會允許額外的位元組進入。如需大小約束陳述式的相關資訊,請參閱大小約束規則陳述式。AWSWAF 不支援檢查內文超過 8 KB 的 Web 請求的整個內容。

您也可以將主體評估為已解析的 JSON。如需有關這項資訊,請參閱下列各節。

JSON 主體

緊接在請求標頭後面的請求部分。內文包含 Web 請求所需的任何其他資料,例如,來自表單的資料。您也可以將內文評估為純文本。如需此項目的相關資訊,請參閱上一節。

  • 在主控台中,您可以在請求選項choiceBody (本文),方法是選取內容類型choiceJSON

  • 在 API 中,在規則的FieldToMatch規格,請指定JsonBody

注意

只有請求內文的前 8 KB (8,192 位元組) 會轉送至 AWS WAF 進行檢查。如果您不需要檢查超過 8 KB,則可以透過將檢查 Web 請求內文的陳述式與對請求內文執行 8 KB 大小上限的大小約束規則陳述式結合,以保證不會允許額外的位元組進入。如需大小約束陳述式的相關資訊,請參閱大小約束規則陳述式。AWSWAF 不支援檢查內文超過 8 KB 的 Web 請求的整個內容。

如需 JSON 內文檢查的詳細資訊,請參閱下節「」。選擇 JSON 主體選項可讓比對陳述式的基本成本 WSU 加倍。例如,如果比對陳述式基本成本為 5 個沒有 JSON 剖析的 WSU,則使用 JSON 剖析會將成本加倍至 10 個 WSU。

JSON 主體請求組件

JSON 主體檢查提供 Web 請求主體的專門檢查。如需 Web 請求主體檢測的一般資訊,請參閱上一節。

時機AWS WAF會將 Web 要求主體檢查為已剖析的 JSON,它會剖析並從 JSON 擷取元素,並檢查您使用規則的比對陳述式準則指出的部分。

選擇此選項可讓比對陳述式的基本成本 WSU 加倍。例如,如果比對陳述式基本成本為 5 個沒有 JSON 剖析的 WSU,則使用 JSON 剖析會將成本加倍至 10 個 WSU。

使用此選項,AWS WAF針對 Web 請求主體運行兩個匹配模式,第一個用作輸入的輸出到第二個:

  1. AWS WAF解析和提取 JSON 內容,並識別要檢查的元素。若要執行此作業AWS WAF會使用您在規則的 JSON 主體規格中提供的準則。

  2. AWS WAF會將任何文字轉換套用至擷取的元素,然後將產生的 JSON 元素設定與規則陳述式的比對準則相符。如果任何元素相符,則 Web 要求就是規則的相符項目。

您可以為AWS WAF用於第一個模式匹配步驟,以識別要檢查的 JSON 元素:

  • 正文解析後備行為— 什麼AWS WAF如果它無法完全解析 JSON 主體,應該這樣做。以下為可用選項:

    • 無 (預設行為)-AWS WAF評估內容,直到遇到解析錯誤的位置。

    • 評估為字串– 檢查內文為純文本。AWS WAF會將您為 JSON 檢查定義的文字轉換和檢查準則套用至內文文字字串。

    • 匹配- 將 Web 請求視為與規則陳述式相符。AWS WAF會將規則動作套用至請求。

    • 沒有相符- 將 Web 請求視為與規則陳述式不相符。

    AWS WAF會盡力剖析整個 JSON 主體,但可能會因為無效字元、重複索引鍵、截斷以及根節點不是物件或陣列的任何內容而被迫停止。

    AWS WAF會將下列範例中的 JSON 剖析為兩個有效的金鑰值對:

    • 缺失逗號:{"key1":"value1""key2":"value2"}

    • 缺失冒號:{"key1":"value1","key2""value2"}

    • 額外冒號:{"key1"::"value1","key2""value2"}

  • JSON 比對範圍— JSON 中的元素類型AWS WAF應該檢查。您可以指定金鑰Values (數值), 或All (全部)鍵和值。

  • 要檢查的內容— 您想要的已剖析和擷取之 JSON 中的元素AWS WAF進行檢查。

    您必須指定下列其中一個選項:

    • 完整的 JSON 內容-評估解析 JSON 中的所有元素。

    • 僅包含的元素-只評估符合您提供的 JSON 指針標準的 JSON 中的元素。如需有關 JSON 指標語法的資訊,請參閱 Internet Engineering Task Force (IETF) 文件。JavaScript 物件標記法指標

      請勿使用此選項來包含all路徑。使用完整的 JSON 內容反之。

      例如,在主控台中,您可以提供下列項目:

      /dogs/0/name /dogs/1/name

      在 API 或 CLI 中,您可以提供以下內容:

      "IncludedPaths": ["/dogs/0/name", "/dogs/1/name"]

JSON 身體檢查案例範例

如果包含的元素設定為/a/b,然後對於以下 JSON 主體:

{ "a":{ "c":"d", "b":{ "e":{ "f":"g" } } } }

下列清單描述AWS WAF將評估每個匹配範圍設置。金鑰b不會評估它是包含元素路徑的一部分。

  • 對於設置為所有匹配範圍:ef,g

  • 對於設置為鍵的匹配範圍:ef

  • 對於匹配範圍設置為值:g

文字轉換

在尋找模式或設定條件約束的陳述式中,您可以提供要 AWS WAF 在檢查請求之前套用的轉換。轉換會將 Web 請求重新格式化,以避免攻擊者用來試圖略過 AWS WAF 的某些異常格式。

當您將此選項與 JSON 主體要求元件選取搭配使用時,AWS WAF在解析和提取元素以從 JSON 檢查之後應用您的轉換。如需詳細資訊,請參閱上一節JSON 主體請求組件

如果您提供多個轉換,您也可以設定讓 AWS WAF 套用它們的順序。

WCU— 每個文字轉換都是 10 個 WSU。

AWS WAF 主控台和 API 文件也會在下列位置提供這些設定的指引:

  • 規則建置器在主控台上 —文字轉換。當您使用請求元件時,此選項可供使用。

  • API 陳述式內容TextTransformations

文字轉換的選項

Base64 解碼

AWS WAF解碼 Base64 編碼字串。

Base64 解碼

AWS WAF解碼 Base64 編碼的字符串,但使用寬容的實現忽略無效的字符。

命令列

此選項可減輕攻擊者可能會注入作業系統命令列命令,並使用不尋常的格式來掩飾部分或全部指令的情況。

使用此選項可執行下列轉換:

  • 刪除以下字元:\ " ' ^

  • 刪除以下字元前的空格:/ (

  • 將以下字元取代為空格:, ;

  • 將數個空格取代為一個空格

  • 將大寫字母 A-Z 轉換成小寫字母 a-z

壓縮空格

AWS WAF 會以一個空格替換多個空格,並用空格字元 (小數 32) 替換以下字元:

  • \f、換頁、小數 12

  • \t、Tab 鍵、小數 9

  • \n、換行,小數 10

  • \r、換行、小數 13

  • \v、垂直標籤、小數 11

  • 非中斷空格,小數 160

CSS 解碼

AWS WAF解碼使用 CSS 2.x 轉義規則編碼的字符syndata.html#characters。這個函數在解碼過程中使用最多兩個位元組,因此它可以幫助發現使用 CSS 編碼而通常不會被編碼的 ASCII 字元。它在反擊逃避方面也很有用,這是反斜杠和非十六進制字符的組合。例如,對於 JavaScript 來說,對於它。

逸出序列解碼

AWS WAF解碼以下 ANSI C 轉義序列:\a, \b, \f, \n, \r, \t, \v, \\, \?, \', \", \xHH (hexadecimal), \0OOO (octal)。 無效的編碼仍保留在輸出中。

十六進位解碼

AWS WAF將十六進制字符串解碼為二進制。

HTML 實體解碼

AWS WAF 使用未編碼字元取代 HTML 編碼字元:

  • " 換成 "

  • 以不分行的空格取代  ,小數 160

  • &lt; 換成 <

  • &gt; 換成 >

  • 將表示為十六進位格式的字元 &#xhhhh; 以對應字元取代

  • 將表示為十進位格式的字元 &#nnnn; 以對應字元取代

JS 解碼

AWS WAF解碼轉 JavaScript 序列。如果\uHHHH代碼位於全寬 ASCII 代碼範圍內FF01-FF5E,則使用較高的位元組來偵測和調整較低位元組。如果沒有,則只會使用較低的位元組,而較高的位元組則會歸零,導致資訊遺失。

LOWSEAD OF

AWS WAF 將所有大寫字母 (A-Z) 轉換成小寫 (a-z)。

MD5

AWS WAF會從輸入中的資料計算 MD5 雜湊。計算的散列是一個原始的二進制形式。

AWS WAF會檢查收到的 Web 請求,而不會進行任何文本轉換。

標準化路徑

AWS WAF會從輸入字串中移除多個斜線、目錄自我參考以及不在輸入開頭的目錄反向參考。

標準化路徑勝利

AWS WAF像這樣處理NORMALIZE_PATH,但首先將反斜杠字符轉換為正斜杠。

移除 NULL

AWS WAF移除所有NULL字節從輸入。

取代註解

AWS WAF用一個空格替換每次出現的 C 風格註釋(/*... */)。不會壓縮多個連續複本。未終止的註解也會取代為空格 (ASCII 0x20)。但是,評論的獨立終止(*/)不會採取行動。

取代空值

AWS WAF取代NULL字節與空格字符(ASCII 0x20)的輸入中。

SQL 十六進位解碼

AWS WAF解碼 SQL 十六進位資料。例如,(0x414243)被解碼為(ABC

URL 解碼

AWS WAF解碼 URL 編碼值。

URL 解碼

LIKEURL_DECODE,但支援微軟特定的%u編碼。如果代碼在全寬 ASCII 代碼範圍內FF01-FF5E,則會使用較高的位元組來偵測和調整較低位元組。否則,只會使用較低的位元組,而較高的位元組則會歸零。

UTF8 轉換為 Unicode

AWS WAF將所有 UTF-8 字符序列轉換為 Unicode。這有助於輸入正規化,並最大限度地減少非英語語言的誤報和誤報。