分享方式:


Web 應用程式防火牆搭配 Azure Front Door 排除清單

Azure Front Door 中的 Azure Web 應用程式防火牆有時可能會封鎖合法的要求。 您可以在調整 Web 應用程式防火牆 (WAF) 期間設定 WAF 以允許應用程式的要求。 WAF 排除清單可讓您從 WAF 評估略過特定要求屬性。 要求的剩餘部分會評估為正常。

例如,Microsoft Entra ID 提供用於驗證的權杖。 若在要求標頭中使用這些權杖,這些權杖可能會包含由一或多個 WAF 規則觸發誤判偵測的特殊字元。 您可以將標頭新增至排除清單,告知 WAF 忽略標頭。 WAF 仍會檢查要求的其餘部分是否有可疑內容。

排除範圍

您可以在下列範圍建立排除:

  • 規則集:這些排除會套用至規則集內的所有規則。
  • 規則群組:這些排除會套用至規則集內特定類別的所有規則。 例如,您可以設定適用於所有 SQL 插入規則的排除。
  • 規則:這些排除會套用至單一規則。

排除選取器

排除選取器會識別要套用排除的要求部分。 WAF 會忽略其在要求的指定部分中找到的任何偵測。 您可以在單一排除中指定多個排除選取器。

每個排除選取器都會指定比對變數、運算子和選取器。

比對變數

您可以將下列要求屬性新增至排除:

  • 要求標頭名稱
  • 要求 Cookie 名稱
  • 查詢字串引數名稱
  • 要求本文 POST 引數名稱
  • 要求本文 JSON 引數名稱 (DRS 2.0 或更新版本上支援)

您所使用的欄位值不會根據 WAF 規則進行評估,但會評估其名稱。 排除清單會停用欄位值的檢查。 不過,仍會評估欄位名稱。 如需詳細資訊,請參閱排除其他要求屬性

操作員

您可以指定要比對的確切要求標頭、本文、Cookie 或查詢字串屬性。 或者,您也可以選擇指定部分相符。 以下是比對準則支援的運算子:

  • 等於:比對確切符合指定選取器值的所有要求欄位。 例如,若要選取名為 bearerToken 的標頭,請使用 Equals 運算子搭配將選取器設定為 bearerToken
  • 開頭為:比對開頭為指定選取器值的所有要求欄位。
  • 結尾為:比對結尾為指定選取器值的所有要求欄位。
  • 包含:比對包含指定選取器值的所有要求欄位。
  • 等於任何:比對所有要求欄位。 使用 Equals any 運算子時,選取器值會自動設定為 *。 例如,您可以使用 Equals any 運算子來設定適用於所有要求標頭的排除。

區分大小寫

標頭和 Cookie 名稱不區分大小寫。 查詢字串、POST 引數和 JSON 引數會區分大小寫。

本文內容檢查

部分受控規則會先評估要求本文的原始承載,再剖析為 POST 引數或 JSON 引數。 因此,在某些情況下,您可能會看到 InitialBodyContentsDecodedInitialBodyContentsmatchVariableName 值的記錄項目。

例如,假設您建立一個排除,其中有比對變數 Request body POST args 以及選取器以識別並忽略名為 FOO 的 POST 引數。 則您不再看到 PostParamValue:FOOmatchVariableName 值的任何記錄項目。 不過,如果名為 FOO 的 POST 引數包含會觸發規則的文字,則記錄可能會顯示在初始本文內容中的偵測。 您目前無法建立適用於初始本文內容的排除。

根據 Azure Web 應用程式防火牆記錄定義排除規則

您可以使用記錄來檢視已封鎖要求的詳細資料,包括已觸發規則的要求部分。 如需詳細資訊,請參閱 Azure Web 應用程式防火牆監視和記錄

有時候,特定 WAF 規則會從要求標頭、Cookie、POST 引數、查詢字串引數或要求本文中的 JSON 欄位中所包含的值產生誤判偵測。 如果發生這些誤判偵測,您可以設定規則,以從其評估中排除要求的相關部分。

下表顯示來自 WAF 記錄和您可以建立的對應排除選取器的範例值。

來自 WAF 記錄的 matchVariableName 入口網站中的規則排除
CookieValue:SOME_NAME 要求 Cookie 名稱等於 SOME_NAME
HeaderValue:SOME_NAME 要求標頭名稱等於 SOME_NAME
PostParamValue:SOME_NAME 要求本文 POST 引數名稱等於 SOME_NAME
QueryParamValue:SOME_NAME 查詢字串引數名稱等於 SOME_NAME
JsonValue:SOME_NAME 要求本文 JSON 引數名稱等於 SOME_NAME

JSON 要求本文的排除

從 DRS 版本 2.0 開始,WAF 會檢查 JSON 要求本文。 例如,考慮此 JSON 要求本文:

{
  "posts": [
    {
      "id": 1,
      "comment": ""
    },
    {
      "id": 2,
      "comment": "\"1=1\""
    }
  ]
}

要求包含 SQL 註解字元序列,而 WAF 會將其偵測為潛在的 SQL 插入式攻擊。

如果您判斷要求合法,則您可以建立排除,其中有比對變數 Request body JSON args name、運算子 Equals,以及選取器 posts.comment

排除其他要求屬性

如果您的 WAF 記錄項目顯示的 matchVariableName 不在上表中,則您無法建立排除。 例如,您目前無法為 Cookie 名稱、標頭名稱、POST 參數名稱或查詢參數名稱建立排除。

相反地,請考慮採取下列其中一個動作:

  • 停用提供誤判的規則。
  • 建立會明確允許這些要求的自訂規則。 要求會略過所有 WAF 檢查。

特別是,當 matchVariableName 值是 CookieNameHeaderNamePostParamNameQueryParamName ,這表示是欄位名稱已觸發規則,而非其值。 規則排除目前不支援這些 matchVariableName 值。

下一步