跳至內容

如何明確允許 AWS WAF 規則封鎖的檔案上傳而不排除規則?

3 分的閱讀內容
0

我想允許使用者使用特定檔案副檔名上傳檔案,而無需封鎖目前的 AWS WAF 組態規則。

簡短描述

HTTP檔案上傳內容有以下幾種常見類型:

  • 表單資料: 作為多部分表單資料的一部分,從網站表單傳送到 API 的資料。
  • 二進位資料: 除了文字承載之外的所有檔案。二進位檔案可以是 JPEG 檔案、GZip 檔案或 PDF 檔案。

若要了解 AWS WAF 封鎖 POST 請求的原因,請查看封鎖檔案上傳的一般規則。如果一般規則不會封鎖上傳,請查看允許封鎖檔案的其他選項。

下列規則通常會封鎖檔案上傳:

  • CrossSiteScripting_BODY
  • SQLi_BODY
  • SizeRestrictions_BODY
  • 評估請求 BODY 的自訂規則

解決方法

確定哪個規則會封鎖檔案上傳

請完成下列步驟以確定哪個規則會封鎖檔案上傳:

1.    開啟 AWS WAF console (AWS WAF 主控台)。

2.    查看採樣的網路請求。採樣的請求包含封鎖請求的規則和 HTTP 請求元件的相關資訊。

3.    在 Overview (概觀) 頁面的 Rule inside rule group (規則群組中的規則) 下,找到 HTTP 請求元件。這些元件看起來類似於以下範例:

規則群組中的規則

awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body

請求

`POST /upload`  
`User-Agent: PostmanRuntime/7.30.0 Accept: */* Host: example.amazonaws.com Connection: keep-alive Content-Type: multipart/form-data; boundary=--------------------------421232031360350156757252 Content-Length: 4060737 `

4.   查看 AWS WAF 完整日誌中的 terminatingRuleMatchDetails

**注意:**只有 SQLi_BODYCrossSiteScripting_BODY 攻擊才會填入 terminatingRuleMatchDetails 欄位。

識別 POST 資料的內容類型

若要識別內容類型,請查看 POST 資料中的 HTTP 標頭以尋找 content-type。在上例中,內容類型為 multipart/form-data

表單資料內容

對於標頭值為 multipart/form-data表單資料內容,請完成下列步驟:

1.    開啟 AWS WAF 主控台

2.    在導覽窗格的 AWS WAF 下,選擇 Web ACL
注意:Region (區域) 的預設選項是美國東部 (維吉尼亞北部)。選擇您建立 Web ACL 的 AWS 區域。如果您的 Web ACL 是為 Amazon CloudFront 設定的,請選擇 Global (全域)。

3.    選擇您的 Web ACL。

4.    在 Rules (規則) 索引標籤上,選擇 Add Rules (新增規則),然後選擇 Add my own rules and rule groups (新增我自己的規則和規則群組)。

5.    在 Add rule (新增規則) 畫面的 Rule Type (規則類型) 下,選擇 Rule builder (規則建置器)。
Name (名稱) 中,輸入可識別此規則的名稱。
Type (類型) 中,選擇 Regular rule (一般規則)。
If a request (如果請求) 中,選擇 matches the statement (比對陳述式)。
針對檢查,選擇內文
針對內容類型,選擇 JSON
針對 JSON 比對範圍,選擇
How AWS WAF should handle the request if the JSON in the request body is invalid (如果請求內文中的 JSON 無效,AWS WAF 應如何處理請求) 中,請選擇適合您的選項。
針對要檢查的內容,選擇完整 JSON 內容
針對比對類型,選擇比對規則表達式
Regular expression (規則表達式) 中,請貼上下列範例規則表達式模式:

(?:.pdf|.doc|.docx|.ppt)

(選用) 在 Text transformation (文字轉換) 中,選擇文字轉換或 None (無)。如需詳細資訊,請參閱文字轉換
Oversize Handling (超大處理) 中,選擇適合您組態的選項。如需詳細資訊,請參閱在 AWS WAF 中處理超大網路請求元件
Action (動作) 中,選擇 Allow (允許)。如需詳細資訊,請參閱 Rule action (規則動作)。

6.    選擇 Add rule (新增規則)。

7.    在 Set Rule Priority (設定規則優先順序) 中,選擇您的規則,並將其移至比封鎖請求規則更高的優先順序。AWS WAF 會根據設定的優先順序來評估規則。如需詳細資訊,請參閱 Web ACL 中規則和規則群組的處理順序

8.    選擇 Save (儲存)。確認規則如預期般運作。

二進位資料內容

對於標頭值類似 application/pdfapplication/ppt二進位資料內容,請完成下列步驟:

1.    開啟 AWS WAF 主控台

2.    在導覽窗格的 AWS WAF 下,選擇 Web ACL
注意:Region (區域) 的預設選項是美國東部 (維吉尼亞北部)。選擇您建立 Web ACL 的 AWS 區域。如果您的 Web ACL 是為 Amazon CloudFront 設定的,請選擇 Global (全域)。

3.    選擇您的 Web ACL。

4.    在 Rules (規則) 索引標籤上,選擇 Add Rules (新增規則),然後選擇 Add my own rules and rule groups (新增我自己的規則和規則群組)。

5.    在 Add rule (新增規則) 畫面的 Rule Type (規則類型) 下,選擇 Rule builder (規則建置器)。
Name (名稱) 中,輸入可識別該規則的名稱。
Type (類型) 中,選擇 Regular rule (一般規則)。
If a request (如果請求) 中,選擇 matches the statement (比對陳述式)。
針對檢查,選擇單一標頭
針對標頭欄位名稱,輸入 Content-Type
針對比對類型,選擇比對規則表達式
Regular expression (規則表達式) 中,請貼上下列範例規則表達式模式:

(?:pdf|jpeg)

(選用) 在 Text transformation (文字轉換) 中,選擇文字轉換或 None (無)。如需詳細資訊,請參閱文字轉換
Action (動作) 中,選擇 Allow (允許)。如需詳細資訊,請參閱 Rule action (規則動作)。

6.    選擇 Add rule (新增規則)。

7.    在 Set Rule Priority (設定規則優先順序) 中,選擇您的規則,並將其移至比封鎖請求規則更高的優先順序。AWS WAF 會根據設定的優先順序來評估規則。如需詳細資訊,請參閱 Web ACL 中規則和規則群組的處理順序

8.    選擇 Save (儲存)。確認規則如預期般運作。

**注意:**若要將規則限制為特定上傳 URI 路徑,請在 Web ACL 規則中使用 AND 陳述式

相關資訊

如何開啟 AWS WAF 記錄功能,並將日誌傳送到 CloudWatch、Amazon S3 或 Kinesis Data Firehose?

AWS 官方已更新 2 年前