

**推出 的新主控台體驗 AWS WAF**

您現在可以使用更新後的體驗，在主控台的任何位置存取 AWS WAF 功能。如需詳細資訊，請參閱[使用 主控台](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)。

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

# 在 中調整規則陳述式設定 AWS WAF
<a name="waf-rule-statement-fields"></a>

本節說明您可以在檢查 Web 請求元件的規則陳述式中指定的設定。如需用量的相關資訊，請參閱 中的個別規則陳述式[在 中使用相符規則陳述式 AWS WAF](waf-rule-statements-match.md)。

這些 Web 請求元件的子集也可以用在以速率為基礎的規則中，做為自訂請求彙總金鑰。如需相關資訊，請參閱[在 中彙總以速率為基礎的規則 AWS WAF](waf-rule-statement-type-rate-based-aggregation-options.md)。

對於請求元件設定，您可以指定元件類型本身，以及任何其他選項，具體取決於元件類型。例如，當您檢查包含文字的元件類型時，您可以在檢查之前對其套用文字轉換。

**注意**  
除非另有說明，否則如果 Web 請求沒有規則陳述式中指定的請求元件， 會將請求 AWS WAF 評估為不符合規則條件。

**Contents**
+ [在 中請求元件 AWS WAF](waf-rule-statement-fields-list.md)
  + [HTTP 方法](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-http-method)
  + [單一標頭](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-header)
  + [所有標頭](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-headers)
  + [標頭順序](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-header-order)
  + [Cookie](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-cookies)
  + [URI 片段](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-uri-fragment)
  + [URI 路徑](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-uri-path)
  + [JA3 指紋](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja3-fingerprint)
  + [JA4 指紋](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-ja4-fingerprint)
  + [查詢字串](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-query-string)
  + [單一查詢參數](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-query-param)
  + [所有查詢參數](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-all-query-params)
  + [Body](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-body)
  + [JSON 內文](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-json-body)
+ [在 中使用轉送的 IP 地址 AWS WAF](waf-rule-statement-forwarded-ip-address.md)
+ [在 中檢查 HTTP/2 虛擬標頭 AWS WAF](waf-rule-statement-request-components-for-http2-pseudo-headers.md)
+ [在 中使用文字轉換 AWS WAF](waf-rule-statement-transformation.md)

# 在 中請求元件 AWS WAF
<a name="waf-rule-statement-fields-list"></a>

本節說明您可以指定用於檢查的 Web 請求元件。您可以為尋找 Web 請求內模式的比對規則陳述式指定請求元件。這些類型的陳述式包括字串比對、regex 比對、大小限制和 SQL Injection 攻擊陳述式。如需如何使用這些請求元件設定的詳細資訊，請參閱 中的個別規則陳述式 [在 中使用相符規則陳述式 AWS WAF](waf-rule-statements-match.md)

除非另有說明，否則如果 Web 請求沒有規則陳述式中指定的請求元件， 會將請求 AWS WAF 評估為不符合規則條件。

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

 AWS WAF 主控台和 API 文件為下列位置的請求元件設定提供指引：
+ 主控台上的**規則建置器** – 在一般規則類型的**陳述式**設定中，選擇您要在請求元件下的**檢查**對話中檢查的元件。 ****
+ **API 陳述式內容** – `FieldToMatch`

本節的其餘部分說明 Web 請求要檢查的部分選項。

**Topics**
+ [HTTP 方法](#waf-rule-statement-request-component-http-method)
+ [單一標頭](#waf-rule-statement-request-component-single-header)
+ [所有標頭](#waf-rule-statement-request-component-headers)
+ [標頭順序](#waf-rule-statement-request-component-header-order)
+ [Cookie](#waf-rule-statement-request-component-cookies)
+ [URI 片段](#waf-rule-statement-request-component-uri-fragment)
+ [URI 路徑](#waf-rule-statement-request-component-uri-path)
+ [JA3 指紋](#waf-rule-statement-request-component-ja3-fingerprint)
+ [JA4 指紋](#waf-rule-statement-request-component-ja4-fingerprint)
+ [查詢字串](#waf-rule-statement-request-component-query-string)
+ [單一查詢參數](#waf-rule-statement-request-component-single-query-param)
+ [所有查詢參數](#waf-rule-statement-request-component-all-query-params)
+ [Body](#waf-rule-statement-request-component-body)
+ [JSON 內文](#waf-rule-statement-request-component-json-body)

## HTTP 方法
<a name="waf-rule-statement-request-component-http-method"></a>

檢查 HTTP 方法是否有請求。HTTP 方法表示 Web 請求請求要求您受保護資源執行的操作類型，例如 `POST`或 `GET`。

## 單一標頭
<a name="waf-rule-statement-request-component-single-header"></a>

檢查請求中的單一具名標頭。

對於此選項，您可以指定標頭名稱，例如 `User-Agent`或 `Referer`。名稱的字串比對不區分大小寫，會在從請求標頭和規則修剪前後空格後執行。

## 所有標頭
<a name="waf-rule-statement-request-component-headers"></a>

檢查所有請求標頭，包括 Cookie。您可以套用篩選條件來檢查所有標頭的子集。

針對此選項，您提供下列規格：
+ **比對模式** – 用來在標頭索引鍵中取得這些模式之 inspection. AWS WAF looks 標頭子集的篩選條件。

  比對模式設定可以是下列其中一項：
  + **全部** – 符合所有金鑰。評估所有標頭的規則檢查條件。
  + **排除標頭** – 僅檢查其索引鍵不符合您在此處指定之任何字串的標頭。金鑰的字串比對不區分大小寫。比對會在從請求標頭和比對規則修剪開頭和結尾空格後執行。
  + **包含的標頭** – 僅檢查金鑰與您在此處指定的其中一個字串相符的標頭。金鑰的字串比對不區分大小寫。比對會在從請求標頭和比對規則修剪開頭和結尾空格後執行。
+ **比對範圍** – AWS WAF 應該使用規則檢查條件進行檢查的標頭部分。您可以指定**金鑰**、**值**或**全部**，以檢查金鑰和值是否相符。

  **全部**不需要在索引鍵中找到相符項目，以及在值中找到相符項目。它需要在索引鍵或值或兩者中找到相符項目。若要在金鑰和值中要求比對，請使用邏輯`AND`陳述式來結合兩個比對規則，其中一個規則會檢查金鑰，另一個規則則會檢查值。
+ **過大處理** – AWS WAF 應如何處理標頭資料大於 AWS WAF 的請求。 最多 AWS WAF 可以檢查請求標頭的前 8 KB (8，192 位元組） 和前 200 個標頭。內容最多可 AWS WAF 達第一個限制可供檢查。您可以選擇繼續檢查，或略過檢查並將請求標記為符合或不符合規則。如需處理過大內容的詳細資訊，請參閱 [在 中過大 Web 請求元件 AWS WAF](waf-oversize-request-components.md)。

## 標頭順序
<a name="waf-rule-statement-request-component-header-order"></a>

檢查包含請求標頭名稱清單的字串，其順序如 AWS WAF 接收以供檢查的 Web 請求中所示。 AWS WAF 會產生字串，然後使用該字串做為欄位來比對其檢查中的元件。 會將字串中的標頭名稱與冒號 AWS WAF 分隔，且沒有新增空格，例如 `host:user-agent:accept:authorization:referer`。

針對此選項，您提供下列規格：
+ **過大處理** – AWS WAF 應如何處理標頭資料超過 AWS WAF 可檢查數量或更大的請求。 最多 AWS WAF 可以檢查請求標頭的前 8 KB (8，192 個位元組） 和前 200 個標頭。內容最多可 AWS WAF 達第一個限制可供檢查。您可以選擇繼續檢查可用的標頭，或略過檢查並將請求標記為符合或不符合規則。如需處理過大內容的詳細資訊，請參閱 [在 中過大 Web 請求元件 AWS WAF](waf-oversize-request-components.md)。

## Cookie
<a name="waf-rule-statement-request-component-cookies"></a>

檢查所有請求 Cookie。您可以套用篩選條件來檢查所有 Cookie 的子集。

針對此選項，您提供下列規格：
+ **比對模式** – 用來取得一部分 Cookie 進行檢查的篩選條件。 會在 Cookie 金鑰中 AWS WAF 尋找這些模式。

  比對模式設定可以是下列其中一項：
  + **全部** – 比對所有金鑰。評估所有 Cookie 的規則檢查條件。
  + **排除的 Cookie** – 僅檢查金鑰與您在此處指定的任何字串不相符的 Cookie。金鑰的字串比對區分大小寫，而且必須完全正確。
  + **包含的 Cookie** – 僅檢查金鑰與您在此處指定的其中一個字串相符的 Cookie。金鑰的字串比對區分大小寫，而且必須完全正確。
+ **比對範圍** – AWS WAF 應使用規則檢查條件檢查的 Cookie 部分。您可以同時為**金鑰**和**值**指定金鑰、值或**全部**。

  **全部**不需要在索引鍵中找到相符項目，以及在值中找到相符項目。它需要在索引鍵或值或兩者中找到相符項目。若要在金鑰和值中要求比對，請使用邏輯`AND`陳述式來結合兩個比對規則，其中一個規則會檢查金鑰，另一個規則則會檢查值。
+ **過大處理** – AWS WAF 應如何處理 Cookie 資料大於 AWS WAF 可檢查的請求。 最多 AWS WAF 可以檢查請求 Cookie 的前 8 KB (8，192 位元組） 和前 200 個 Cookie。內容最多可 AWS WAF 達第一個限制可供檢查。您可以選擇繼續檢查，或略過檢查並將請求標記為符合或不符合規則。如需處理過大內容的詳細資訊，請參閱 [在 中過大 Web 請求元件 AWS WAF](waf-oversize-request-components.md)。

## URI 片段
<a name="waf-rule-statement-request-component-uri-fragment"></a>

**注意**  
Uri Fragment 檢查僅適用於 CloudFront 分佈和 Application Load Balancer。

檢查遵循 "\$1" 符號的 URL 部分，提供資源的其他資訊，例如 \$1section2。如需詳細資訊，請參閱[統一資源識別符 (URI)：一般語法](https://tools.ietf.org/html/rfc3986#section-3)。

如果您不搭配此選項使用文字轉換， AWS WAF 不會正規化 URI 片段，並完全依照在請求中從用戶端接收到的 URI 片段進行檢查。如需文字轉換的資訊，請參閱 [在 中使用文字轉換 AWS WAF](waf-rule-statement-transformation.md)。

**規則陳述式要求**  
您必須為此規則陳述式提供備用行為。如果 URI 缺少片段或相關聯的服務不是 Application Load Balancer 或 CloudFront，則備用行為是您想要 AWS WAF 指派給 Web 請求的比對狀態。如果您選擇比對， 會將請求 AWS WAF 視為比對規則陳述式，並將規則動作套用至請求。如果您選擇不相符， 會將請求 AWS WAF 視為不符合規則陳述式。

## URI 路徑
<a name="waf-rule-statement-request-component-uri-path"></a>

檢查識別資源的 URL 部分，例如 `/images/daily-ad.jpg`。如需詳細資訊，請參閱[統一資源識別符 (URI)：一般語法](https://tools.ietf.org/html/rfc3986#section-3)。

如果您不搭配此選項使用文字轉換， AWS WAF 不會正規化 URI，並完全依照在請求中從用戶端接收 URI 的方式進行檢查。如需文字轉換的資訊，請參閱 [在 中使用文字轉換 AWS WAF](waf-rule-statement-transformation.md)。

## JA3 指紋
<a name="waf-rule-statement-request-component-ja3-fingerprint"></a>

檢查請求的 JA3 指紋。

**注意**  
JA3 指紋檢查僅適用於 Amazon CloudFront 分佈和 Application Load Balancer。

JA3 指紋是從傳入請求的 TLS Client Hello 衍生的 32 個字元雜湊。此指紋可做為用戶端 TLS 組態的唯一識別符。 會針對具有足夠 TLS Client Hello 資訊以進行計算的每個請求 AWS WAF ，計算並記錄此指紋。幾乎所有 Web 請求都包含此資訊。

**如何取得用戶端的 JA3 指紋**  
您可以從保護套件 (Web ACL) 日誌取得用戶端請求的 JA3 指紋。如果 AWS WAF 能夠計算指紋，它會將其包含在日誌中。如需記錄欄位的資訊，請參閱 [保護套件 (Web ACL) 流量的日誌欄位](logging-fields.md)。

**規則陳述式要求**  
您只能在設定為完全符合您提供的字串的字串比對陳述式內檢查 JA3 指紋。在字串比對陳述式規格中提供來自日誌的 JA3 指紋字串，以符合具有相同 TLS 組態的任何未來請求。如需字串比對陳述式的詳細資訊，請參閱 [字串比對規則陳述式](waf-rule-statement-type-string-match.md)。

您必須為此規則陳述式提供備用行為。如果 無法計算 JA3 指紋，則備用行為是您想要 AWS WAF 指派給 Web 請求 AWS WAF 的比對狀態。如果您選擇比對， AWS WAF 會將請求視為比對規則陳述式，並將規則動作套用至請求。如果您選擇不相符， 會將請求 AWS WAF 視為不符合規則陳述式。

若要使用此比對選項，您必須記錄保護套件 (Web ACL) 流量。如需相關資訊，請參閱[記錄 AWS WAF 保護套件 (Web ACL) 流量](logging.md)。

## JA4 指紋
<a name="waf-rule-statement-request-component-ja4-fingerprint"></a>

檢查請求的 JA4 指紋。

**注意**  
JA4 指紋檢查僅適用於 Amazon CloudFront 分佈和 Application Load Balancer。

JA4 指紋是從傳入請求的 TLS Client Hello 衍生的 36 個字元雜湊。此指紋可做為用戶端 TLS 組態的唯一識別符。JA4 指紋是 JA3 指紋的延伸，可能會導致某些瀏覽器產生較少的唯一指紋。 會為每個具有足夠 TLS Client Hello 資訊的請求 AWS WAF 計算並記錄此指紋。幾乎所有 Web 請求都包含此資訊。

**如何取得用戶端的 JA4 指紋**  
您可以從保護套件 (Web ACL) 日誌取得用戶端請求的 JA4 指紋。如果 AWS WAF 能夠計算指紋，它會將其包含在日誌中。如需記錄欄位的資訊，請參閱 [保護套件 (Web ACL) 流量的日誌欄位](logging-fields.md)。

**規則陳述式要求**  
您只能在設定為完全符合您提供的字串的字串比對陳述式內檢查 JA4 指紋。在字串比對陳述式規格中提供來自日誌的 JA4 指紋字串，以符合任何未來具有相同 TLS 組態的請求。如需字串比對陳述式的詳細資訊，請參閱 [字串比對規則陳述式](waf-rule-statement-type-string-match.md)。

您必須為此規則陳述式提供備用行為。如果 無法計算 JA4 指紋，則備用行為是您想要 AWS WAF 指派給 Web 請求 AWS WAF 的比對狀態。如果您選擇比對， AWS WAF 會將請求視為比對規則陳述式，並將規則動作套用至請求。如果您選擇不相符， 會將請求 AWS WAF 視為不符合規則陳述式。

若要使用此比對選項，您必須記錄保護套件 (Web ACL) 流量。如需相關資訊，請參閱[記錄 AWS WAF 保護套件 (Web ACL) 流量](logging.md)。

## 查詢字串
<a name="waf-rule-statement-request-component-query-string"></a>

檢查`?`字元後面出現的 URL 部分，如果有的話。

**注意**  
對於跨網站指令碼比對陳述式，我們建議您選擇**所有查詢參數**，而不是**查詢字串**。選擇**所有查詢參數**會將 10 WCUs 新增至基本成本。

## 單一查詢參數
<a name="waf-rule-statement-request-component-single-query-param"></a>

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

針對此選項，您也可以指定**查詢引數**。例如，如果 URL 為 `www.xyz.com?UserName=abc&SalesRegion=seattle`，您可以`SalesRegion`為查詢引數指定 `UserName`或 。引數名稱的長度上限為 30 個字元。名稱不區分大小寫，因此如果您指定 `UserName`， 會 AWS WAF 比對 的所有變化`UserName`，包括 `username`和 `UsERName`。

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

## 所有查詢參數
<a name="waf-rule-statement-request-component-all-query-params"></a>

檢查請求中的所有查詢參數。這類似於單一查詢參數元件選擇，但會 AWS WAF 檢查查詢字串中所有引數的值。例如，如果 URL 為 `www.xyz.com?UserName=abc&SalesRegion=seattle`，則 AWS WAF 會在 `UserName` 或 `SalesRegion` 的值符合比對檢查準則時觸發比對。

選擇此選項會將 10 WCUs 新增至基本成本。

## Body
<a name="waf-rule-statement-request-component-body"></a>

檢查請求內文，評估為純文字。您也可以使用JSON內容類型將內文評估為 JSON。

請求內文是緊接請求標頭的請求部分。它包含 Web 請求所需的任何其他資料，例如來自表單的資料。
+ 在 主控台中，您可以透過選取**內容類型**選擇**純文字**，在**請求選項**選擇**內文**下選取此選項。
+ 在 API 中，在規則的`FieldToMatch`規格中，您可以指定 `Body`以純文字形式檢查請求內文。

對於 Application Load Balancer 和 AWS AppSync， AWS WAF 可以檢查請求內文的前 8 KB。對於 CloudFront、API Gateway、Amazon Cognito、App Runner 和 Verified Access，預設 AWS WAF 可以檢查前 16 KB，而且您可以將保護套件 (Web ACL) 組態中的限制提高到 64 KB。如需詳細資訊，請參閱[在 中管理主體檢查的考量事項 AWS WAF](web-acl-setting-body-inspection-limit.md)。

您必須為此元件類型指定過大處理。過大處理定義 AWS WAF 如何處理內文資料大於 AWS WAF 可檢查的請求。您可以選擇繼續檢查，或略過檢查並將請求標記為符合或不符合規則。如需處理過大內容的詳細資訊，請參閱 [在 中過大 Web 請求元件 AWS WAF](waf-oversize-request-components.md)。

您也可以將內文評估為剖析的 JSON。如需詳細資訊，請參閱以下章節。

## JSON 內文
<a name="waf-rule-statement-request-component-json-body"></a>

檢查請求內文，評估為 JSON。您也可以將內文評估為純文字。

請求內文是緊接請求標頭的請求部分。它包含 Web 請求所需的任何其他資料，例如來自表單的資料。
+ 在主控台中，您可以透過選取**內容類型**選擇 **JSON**，在**請求選項**選擇**內文**下選取此選項。
+ 在 API 的規則`FieldToMatch`規格中，您可以指定 `JsonBody`。

對於 Application Load Balancer 和 AWS AppSync， AWS WAF 可以檢查請求內文的前 8 KB。根據預設，對於 CloudFront、API Gateway、Amazon Cognito、App Runner 和 Verified Access， AWS WAF 可以檢查前 16 KB，而且您可以將保護套件 (Web ACL) 組態中的限制提高到 64 KB。如需詳細資訊，請參閱[在 中管理主體檢查的考量事項 AWS WAF](web-acl-setting-body-inspection-limit.md)。

您必須為此元件類型指定過大處理。過大處理定義 AWS WAF 如何處理內文資料大於 AWS WAF 可檢查的請求。您可以選擇繼續檢查，或略過檢查並將請求標記為符合或不符合規則。如需處理過大內容的詳細資訊，請參閱 [在 中過大 Web 請求元件 AWS WAF](waf-oversize-request-components.md)。

選擇此選項會將比對陳述式的基本成本 WCUs加倍。例如，如果比對陳述式基本成本為 5 WCUs而沒有 JSON 剖析，則使用 JSON 剖析會將成本加倍為 10 WCUs。

對於此選項，您可以提供其他規格，如下節所述。

**AWS WAF 如何處理 JSON 內文檢查**  
當 將 Web 請求內文 AWS WAF 檢查為 JSON 時，它會執行步驟來剖析內文，並擷取 JSON 元素以進行檢查。 會根據您的組態選擇 AWS WAF 執行這些步驟。

下列列出 AWS WAF 執行的步驟。

1. **剖析內文內容** – AWS WAF 剖析 Web 請求內文的內容，以擷取 JSON 元素進行檢查。 AWS WAF 會盡力剖析內文的整個內容，但剖析可能會因內容中的各種錯誤狀態而失敗。範例包括無效的字元、重複的金鑰、截斷，以及根節點不是物件或陣列的內容。

   選項內**文剖析後援行為**會決定如果無法完整剖析 JSON 內文， AWS WAF 該怎麼辦：
   + **None （預設行為）** - 評估 AWS WAF 內容直到遇到剖析錯誤為止。
   + **評估為字串** - 檢查內文為純文字。 會將您為 JSON 檢查定義的文字轉換和檢查條件 AWS WAF 套用至內文文字字串。
   + **相符** - 將 Web 請求視為符合規則陳述式。 會將規則動作 AWS WAF 套用至請求。
   + **不相符** - 將 Web 請求視為不符合規則陳述式。
**注意**  
此備用行為只會在剖析 JSON 字串 AWS WAF 時發生錯誤時觸發。

**剖析無法完全驗證 JSON**  
AWS WAF 剖析不會完全驗證輸入 JSON 字串，因此即使 JSON 無效，剖析也會成功。

   例如， 會 AWS WAF 剖析下列無錯誤的無效 JSON：
   + 缺失逗號：`{"key1":"value1""key2":"value2"}`
   + 缺失冒號：`{"key1":"value1","key2""value2"}`
   + 額外冒號：`{"key1"::"value1","key2""value2"}`

   對於剖析成功但結果不是完全有效 JSON 的這類案例，評估中後續步驟的結果可能會有所不同。擷取可能會遺漏一些元素，或者規則評估可能會有非預期的結果。我們建議您驗證應用程式中收到的 JSON，並視需要處理無效的 JSON。

1. **擷取 JSON 元素** – 根據您的設定 AWS WAF 識別要檢查的 JSON 元素子集：
   + 選項 **JSON 比對範圍**指定 JSON 中 AWS WAF 應檢查的元素類型。

     您可以同時為**金鑰**和**值**指定金鑰、值或**全部**。

     **全部**不需要在索引鍵中找到相符項目，以及在值中找到相符項目。它需要在索引鍵或值或兩者中找到相符項目。若要在金鑰和值中要求相符項目，請使用邏輯`AND`陳述式來結合兩個相符規則，一個規則會檢查金鑰，另一個規則則會檢查值。
   + **要檢查的選項 內容**指定如何篩選設定為您要 AWS WAF 檢查之子集的元素。

     您必須指定下列其中一項：
     + **完整 JSON 內容** - 評估所有元素。
     + **僅包含的元素** - 僅評估路徑符合您提供的 JSON 指標條件的元素。請勿使用此選項來指示 JSON 中的所有**路徑。請改用**完整 JSON 內容**。

       如需 JSON 指標語法的相關資訊，請參閱網際網路工程任務小組 (IETF) 文件 [JavaScript 物件標記法 (JSON) 指標](https://tools.ietf.org/html/rfc6901)。

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

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

       在 API 或 CLI 中，您可以提供下列項目：

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

   例如，假設**要檢查設定的內容**是**僅包含的元素**，而包含的元素設定是 `/a/b`。

   對於下列範例 JSON 內文：

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

    AWS WAF 會檢查每個 **JSON 比對範圍**設定的元素集如下所示。請注意`b`，金鑰 是包含元素路徑的一部分，因此不會進行評估。
   + **全部**：`e`、 `f,`和 `g`。
   + **金鑰**： `e`和 `f`。
   + **值**：`g`。

1. **檢查 JSON 元素集** – 將您指定的任何文字轉換 AWS WAF 套用至擷取的 JSON 元素，然後將產生的元素集與規則陳述式的比對條件相符。這與其他 Web 請求元件的轉換和評估行為相同。如果任何擷取的 JSON 元素相符，表示 Web 請求符合規則。

# 在 中使用轉送的 IP 地址 AWS WAF
<a name="waf-rule-statement-forwarded-ip-address"></a>

本節適用於使用 Web 請求 IP 地址的規則陳述式。根據預設， AWS WAF 會使用來自 Web 請求原始伺服器的 IP 地址。不過，如果 Web 請求通過一或多個代理或負載平衡器，Web 請求原始伺服器將包含最後一個代理的地址，而不是用戶端的原始地址。在這種情況下，來源用戶端地址通常會在另一個 HTTP 標頭中轉送。此標頭通常是 `X-Forwarded-For`(XFF)，但可以是不同的標頭。

**使用 IP 地址的規則陳述式**  
使用 IP 地址的規則陳述式如下：
+ [IP 集合比對](waf-rule-statement-type-ipset-match.md) - 檢查 IP 地址是否與 IP 集中定義的地址相符。
+ [地理比對](waf-rule-statement-type-geo-match.md) - 使用 IP 地址來判斷原始國家/地區和區域，並將原始國家/地區與國家/地區清單比對。
+ [ASN 比對](waf-rule-statement-type-asn-match.md) - 使用 IP 地址來判斷自治系統編號 (ASN)，並將 ASN 與 ASNs清單比對。
+ [使用以速率為基礎的規則陳述式](waf-rule-statement-type-rate-based.md) - 可以依其 IP 地址彙總請求，以確保個別 IP 地址不會以過高的速率傳送請求。您可以單獨使用 IP 地址彙總，或與其他彙總金鑰結合使用。

您可以指示 從 `X-Forwarded-For`標頭或另一個 HTTP 標頭使用任何這些規則陳述式的 AWS WAF 轉送 IP 地址，而不是使用 Web 請求的原始伺服器。如需如何提供規格的詳細資訊，請參閱個別規則陳述式類型的指引。

**注意**  
如果缺少標頭， 會 AWS WAF 評估使用該標頭的任何陳述式為「不相符」。如果您使用 NOT 陳述式搭配 "No match" 結果， 會將評估 AWS WAF 轉換為 "Match"。缺少標頭不會觸發備用行為 - 只有無效的標頭值才會觸發。

**備用行為**  
當您使用轉送的 IP 地址時，如果請求在指定位置沒有有效的 IP 地址，您會指出 AWS WAF 要指派給 Web 請求的比對狀態：
+ **MATCH** - 將 Web 請求視為符合規則陳述式。 會將規則動作 AWS WAF 套用至請求。
+ **NO MATCH** - 將 Web 請求視為不符合規則陳述式。

**機器人 AWS WAF 控制中使用的 IP 地址**  
Bot Control 受管規則群組會使用來自 的 IP 地址來驗證機器人 AWS WAF。如果您使用 Bot Control，而且已驗證透過代理或負載平衡器路由的機器人，則需要使用自訂規則明確允許它們。例如，您可以設定自訂 IP 集比對規則，使用轉送的 IP 地址來偵測和允許已驗證的機器人。您可以使用 規則，以多種方式自訂機器人管理。如需詳細資訊和範例，請參閱 [AWS WAF 機器人控制](waf-bot-control.md)。

**使用轉送 IP 地址的一般考量**  
在使用轉送的 IP 地址之前，請注意下列一般注意事項：
+ 代理可以沿途修改標頭，代理可能會以不同的方式處理標頭。
+ 攻擊者可能會更改 標頭的內容，以嘗試繞過 AWS WAF 檢查。
+ 標頭內的 IP 地址可能格式錯誤或無效。
+ 您指定的標頭可能完全不存在於請求中。

**搭配 使用轉送 IP 地址的考量 AWS WAF**  
下列清單說明在 中使用轉送 IP 地址的要求和注意事項 AWS WAF：
+ 對於任何單一規則，您可以為轉送的 IP 地址指定一個標頭。標頭規格不區分大小寫。
+ 對於以速率為基礎的規則陳述式，任何巢狀範圍陳述式都不會繼承轉送的 IP 組態。為使用轉送 IP 地址的每個陳述式指定組態。
+ 對於地理比對、ASN 比對和以速率為基礎的規則， AWS WAF 會使用 標頭中的第一個地址。例如，如果標頭包含 `10.1.1.1, 127.0.0.0, 10.10.10.10` AWS WAF 使用 `10.1.1.1`
+ 對於 IP 集比對，您可以指出要比對標頭中的第一個、最後一個或任何地址。如果您指定任何 ， 會 AWS WAF 檢查標頭中的所有地址是否相符，最多 10 個地址。如果標頭包含超過 10 個地址， 會 AWS WAF 檢查最後 10 個地址。
+ 包含多個地址的標頭必須在地址之間使用逗號分隔符號。如果請求使用逗號以外的分隔符號， AWS WAF 會將標頭中的 IP 地址視為格式錯誤。
+ 如果標頭內的 IP 地址格式錯誤或無效， AWS WAF 會根據您在轉送 IP 組態中指定的備用行為，將 Web 請求指定為符合規則或不相符。
+ 如果您指定的標頭不存在於請求中， AWS WAF 則 不會將規則套用至請求。這表示 AWS WAF 不會套用規則動作，也不會套用備用行為。
+ 針對 IP 地址使用轉送 IP 標頭的規則陳述式不會使用 Web 請求原始伺服器報告的 IP 地址。

**搭配 使用轉送 IP 地址的最佳實務 AWS WAF**  
當您使用轉送的 IP 地址時，請使用下列最佳實務：
+ 在啟用轉送 IP 組態之前，請仔細考慮請求標頭的所有可能狀態。您可能需要使用多個規則來取得您想要的行為。
+ 若要檢查多個轉送 IP 標頭或檢查 Web 請求原始伺服器和轉送 IP 標頭，請為每個 IP 地址來源使用一個規則。
+ 若要封鎖具有無效標頭的 Web 請求，請設定規則動作來封鎖和設定要符合之轉送 IP 組態的備用行為。

**轉送 IP 地址的範例 JSON**  
下列地理比對陳述式只有在 `X-Forwarded-For` 標頭包含的 IP 原始國家/地區為 時才會相符`US`：

```
{
  "Name": "XFFTestGeo",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "XFFTestGeo"
  },
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ],
      "ForwardedIPConfig": {
        "HeaderName": "x-forwarded-for",
        "FallbackBehavior": "MATCH"
      }
    }
  }
}
```

下列以速率為基礎的規則會根據 `X-Forwarded-For`標頭中的第一個 IP 彙總請求。規則只會計算符合巢狀地理比對陳述式的請求，而且只會封鎖符合地理比對陳述式的請求。巢狀地理比對陳述式也會使用 `X-Forwarded-For`標頭來判斷 IP 地址是否指出 的原始國家/地區`US`。如果存在，或者如果標頭存在但格式不正確，則地理比對陳述式會傳回相符項目。

```
{
  "Name": "XFFTestRateGeo",
  "Priority": 0,
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "XFFTestRateGeo"
  },
  "Statement": {
    "RateBasedStatement": {
      "Limit": "100",
      "AggregateKeyType": "FORWARDED_IP",
      "ScopeDownStatement": {
        "GeoMatchStatement": {
          "CountryCodes": [
            "US"
          ],
          "ForwardedIPConfig": {
            "HeaderName": "x-forwarded-for",
            "FallbackBehavior": "MATCH"
          }
        }
      },
      "ForwardedIPConfig": {
        "HeaderName": "x-forwarded-for",
        "FallbackBehavior": "MATCH"
      }
    }
  }
}
```

# 在 中檢查 HTTP/2 虛擬標頭 AWS WAF
<a name="waf-rule-statement-request-components-for-http2-pseudo-headers"></a>

本節說明如何使用 AWS WAF 檢查 HTTP/2 虛擬標頭。

支援 HTTP/2 流量的受保護 AWS 資源不會將 HTTP/2 虛擬標頭轉送至 AWS WAF 進行檢查，但會在 AWS WAF 檢查的 Web 請求元件中提供虛擬標頭的內容。

您可以使用 僅 AWS WAF 檢查下表中列出的虛擬標頭。


**HTTP/2 虛擬標頭內容映射至 Web 請求元件**  

| HTTP/2 虛擬標頭 | 要檢查的 Web 請求元件 | 文件 | 
| --- | --- | --- | 
|  `:method`  |  HTTP 方法   |  [HTTP 方法](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-http-method)  | 
|  `:authority`  |  `Host` 標頭   |  [單一標頭](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-header)  [所有標頭](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-headers)  | 
|  `:path` URI 路徑  | URI 路徑  | [URI 路徑](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-uri-path) | 
|  `:path` 查詢  |  查詢字串  |  [查詢字串](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-query-string) [單一查詢參數](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-single-query-param) [所有查詢參數](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-all-query-params)  | 

# 在 中使用文字轉換 AWS WAF
<a name="waf-rule-statement-transformation"></a>

本節說明如何在檢查請求之前提供 AWS WAF 要套用的轉換。

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

當您搭配 JSON 內文請求元件選擇使用時， AWS WAF 會在剖析和擷取元素以從 JSON 檢查之後套用轉換。如需詳細資訊，請參閱[JSON 內文](waf-rule-statement-fields-list.md#waf-rule-statement-request-component-json-body)。

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

**WCUs** – 每個文字轉換都是 10 WCUs。

 AWS WAF 主控台和 API 文件也提供下列位置中這些設定的指引：
+ 主控台上的**規則建置器** – **文字轉換**。當您使用請求元件時，此選項可供使用。
+ **API 陳述式內容** – `TextTransformations`文字轉換的選項

每個轉換清單會顯示主控台和 API 規格，後面接著描述。

Base64 decode – `BASE64_DECODE`  
AWS WAF 解碼 Base64-encoded字串。

Base64 decode extension – `BASE64_DECODE_EXT`  
AWS WAF 解碼 Base64-encoded字串，但使用忽略無效字元的寬容實作。

Command line – `CMD_LINE`  
此選項可緩解攻擊者可能注入作業系統命令列命令，並使用異常格式來掩飾部分或全部命令的情況。  
使用此選項可執行下列轉換：  
+ 刪除以下字元：`\ " ' ^`
+ 刪除以下字元前的空格：`/ (`
+ 將以下字元取代為空格：`, ;`
+ 將數個空格取代為一個空格
+ 將大寫字母 `A-Z` 轉換成小寫字母 `a-z`

Compress whitespace – `COMPRESS_WHITE_SPACE`  
AWS WAF 壓縮空格的方式是將多個空格取代為一個空格，並將下列字元取代為空格字元 (ASCII 32)：  
+ Formfeed (ASCII 12)
+ Tab (ASCII 9)
+ Newline (ASCII 10)
+ 歸位運送 (ASCII 13)
+ 垂直標籤 (ASCII 11)
+ 非中斷空間 (ASCII 160)

CSS decode – `CSS_DECODE`  
AWS WAF 解碼使用 CSS 2.x 逸出規則 編碼的字元。 `syndata.html#characters`此函數在解碼過程中最多使用兩個位元組，因此它可以幫助您發現使用 CSS 編碼進行編碼的 ASCII 字元 (這些字元通常不會被編碼)。它在反擊逃脫方面也很有用，後者是反斜線和非十六進位字元的組合。例如，`javascript` 的 `ja\vascript`。

Escape sequences decode – `ESCAPE_SEQ_DECODE`  
AWS WAF 解碼下列 ANSI C 逸出序列：`\a`、`\b`、`\f`、`\n`、`\r``\t`、、`\v`、`\\``\?`、`\'`、`\"`、、 `\xHH` （十六進位）、`\0OOO`（八進位）。無效的編碼會保留在輸出中。

Hex decode – `HEX_DECODE`  
AWS WAF 會將十六進位字元字串解碼為二進位。

HTML entity decode – `HTML_ENTITY_DECODE`  
AWS WAF 會將以十六進位格式`&#xhhhh;`或十進位格式表示的字元`&#nnnn;`取代為對應的字元。  
AWS WAF 會以未編碼的字元取代下列 HTML 編碼的字元。此清單使用小寫 HTML 編碼，但處理方式不區分大小寫，例如`&quot;`，`&QuOt;`且視為相同。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/waf/latest/developerguide/waf-rule-statement-transformation.html)

JS decode – `JS_DECODE`  
AWS WAF 解碼 JavaScript 逸出序列。如果`\uHHHH`程式碼在 的完整寬度 ASCII 程式碼範圍內`FF01-FF5E`，則會使用較高的位元組來偵測和調整較低的位元組。如果不是，則只會使用較低的位元組，並將較高的位元組歸零，而這可能導致資訊遺失。

Lowercase – `LOWERCASE`  
AWS WAF 將大寫字母 (A-Z) 轉換為小寫 (a-z)。

MD5 – `MD5`  
AWS WAF 從輸入中的資料計算 MD5 雜湊。計算出的雜湊是原始二進位形式。

None – `NONE`  
AWS WAF 會檢查 Web 請求是否收到，而不會進行任何文字轉換。

Normalize path – `NORMALIZE_PATH`  
AWS WAF 透過移除不在輸入開頭的多個斜線、目錄自我參考和目錄回溯參考來標準化輸入字串。

Normalize path Windows – `NORMALIZE_PATH_WIN`  
AWS WAF 轉換反斜線字元以轉送斜線，然後使用`NORMALIZE_PATH`轉換處理產生的字串。

Remove nulls – `REMOVE_NULLS`  
AWS WAF 會從輸入中移除所有`NULL`位元組。

Replace comments – `REPLACE_COMMENTS`  
AWS WAF 會以單一空格取代每次出現的 C 樣式註解 (/\$1 ... \$1/)。它不會壓縮多個連續的出現次數。它以空格 (ASCII 0x20) 取代未終止的註解。它不會變更註解的獨立終止 (\$1/)。

Replace nulls – `REPLACE_NULLS`  
AWS WAF 會以空格字元 (ASCII 0x20) `NULL` 取代輸入中的每個位元組。

SQL hex decode – `SQL_HEX_DECODE`  
AWS WAF 解碼 SQL 十六進位資料。例如，將 (`0x414243`) AWS WAF 解碼為 (`ABC`)。

URL decode – `URL_DECODE`  
AWS WAF 解碼 URL 編碼的值。

URL decode Unicode – `URL_DECODE_UNI`  
與 類似`URL_DECODE`，但支援 Microsoft 特定`%u`編碼。如果代碼是在 `FF01-FF5E` 的全形 ASCII 碼範圍內，則使用較高的位元組來偵測和調整較低的位元組。否則，只會使用較低的位元組，而較高的位元組會歸零。

UTF8 to Unicode – `UTF8_TO_UNICODE`  
AWS WAF 將所有 UTF-8 字元序列轉換為 Unicode。這有助於標準化輸入，並將非英文語言的偽陽性和偽陰性降至最低。