如何明確允許 AWS WAF 規則封鎖的檔案上傳而不排除規則?
我想允許使用者使用特定檔案副檔名上傳檔案,而無需封鎖目前的 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_BODY 和 CrossSiteScripting_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/pdf 或 application/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?
