Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
為什麼 AWS WAF 會封鎖我的合法上傳請求?
我想上傳 (POST) 檔案,該檔案會使用 AWS WAF 封鎖的擴充功能。
簡短描述
AWS WAF 可能會因以下其中一個原因封鎖 POST 請求:
- 您的檔案大小超過 AWS WAF 可檢查的最大請求主體大小。AWS WAF 已修正主體檢查大小配額。
- SQL injection 隱碼攻擊和跨網站指令碼 (XSS) 規則對中繼資料中含有隨機字元的檔案非常敏感。這些隨機字元可能會調用 Web 存取控制清單 (Web ACL) 規則。這是因為它們與 AWS WAF 中實際的 XSS 或 SQL injection 隱碼攻擊特徵非常相似。
首先,請檢閱可能會封鎖檔案上傳的常見規則。如果一般規則不會封鎖上傳,請考慮其他選項來允許封鎖的檔案。
下列規則通常會封鎖檔案上傳:
- SQLi_BODY
- CrossSiteScripting_BODY
- WindowsShellCommands_BODY
- GenericLFI_BODY
- SizeRestrictions_BODY
解決方法
檔案上傳遭到 SQLi_BODY 和 CrossSiteScripting_BODY 規則封鎖
請檢查 AWS WAF 完整日誌中的 terminatingRuleMatchDetails 欄位,以取得規則資訊。
**注意:**terminatingRuleMatchDetails 欄位僅會針對 SQLi_BODY 和 CrossSiteScripting_BODY 攻擊填入。
下列是 CrossSiteScripting_BODY 的 matchedData 範例:
"terminatingRuleMatchDetails": [{ "conditionType": "XSS", "location": "BODY", "matchedData": [ "
下列是 SQLi_BODY 的 matchedData 範例:
"terminatingRuleMatchDetails": [{ "conditionType": "SQL_INJECTION", "location": "BODY", "matchedData": [ ")", "*", "(", "0" ]
若要處理由 SQLi_BODY 或 CrossSiteScripting_BODY 封鎖的上傳,請選擇下列其中一個選項。
將已知的 IP 位址新增至安全清單
如果您知道存取應用程式的 IP 位址範圍,請使用 IP 比對條件。這會將 IP 位址新增至安全清單規則。
使用具有比對條件的安全清單
使用具有字串或規則運算式 (regex) 比對條件的安全清單來允許請求。根據 URI、HTTP 標頭或與 AWS WAF 檔案主體相關的字詞來建立安全清單。
在您的安全清單中使用唯一識別碼,以辨識可視為合法的請求。
若要建立安全清單,請建立新的自訂規則。此規則會封鎖 XSS 或 SQLi 攻擊向量,但具有例外狀況條件。該條件是根據符合上傳用的有效請求屬性的比對資料所設定。覆寫受管規則群組中導致誤判的特定規則的動作。對於這些規則,請將 SQLi_BODY 和 CrossSiteScripting_BODY 設定為 Count (計數)。
若要建立此自訂規則,請完成以下步驟:
- 開啟 AWS WAF console (AWS WAF 主控台)。
- 在導覽窗格中,選擇 AWS WAF。
- 選擇 Resources & protection packs (資源和保護套件)。
- 找到您的保護套件,然後選擇 Rules (規則) 旁的 View and edit (檢視和編輯)。
- 在右側窗格中,選擇 Add rules (新增規則)。
選擇 Custom rule (自訂規則),然後按一下 Next (下一步)。 再次選擇 Custom rule (自訂規則),然後按一下 Next (下一步)。 - 將規則 Action (動作) 更新為 BLOCK (封鎖)。
- 輸入您的規則名稱。
- 在 If a request (如果請求) 中,展開下拉式功能表並選擇 matches all the statements (AND) (符合所有陳述式 (AND))。
- 在 Statement 1 (陳述式 1) 中,完成以下內容:
在 Inspect (檢查) 中,選擇 Has a label (有標籤)。
在 Statement (陳述式),選擇 Label (標籤)。
在 Match key (比對索引鍵),輸入產生誤判的規則標籤。 例如,如果 CrossSiteScripting_BODY 規則產生誤判,則輸入 awswaf:managed:aws:core-rule-set:CrossSiteScripting_Body。 - 在 Statement 2 (陳述式 2) 中,完成以下內容:在 Inspect (檢查),選擇 Body (主體)。
在 Statement (陳述式),選擇 Oversize Handling (超大處理) 以繼續。
在 Match type (比對類型) 中,選擇 Contains string (包含字串)。
在 String to match (比對字串),輸入要與規則比對的值。
(選用) 在 Text transformation (文字轉換) 中,選擇 text transformation (文字轉換) 或 None (無)。
展開 Rule configuration (規則組態),在 Negate statement (NOT) (否定陳述式 (NOT)) 下,選擇 Negate statement results (否定陳述式結果)。 - 選擇 Create rule (建立規則)。
- 若要設定規則優先順序,請在右側窗格中選取 Edit Rule Order (編輯規則順序),然後將此規則拖曳到封鎖請求的受管規則群組下方。這樣會讓受管規則的標籤優先於規則群組的檢查。接著,AWS WAF 會在下一個規則優先順序中使用該標籤。
- 選擇 Save Rule Order (儲存規則順序)。
**注意:**最佳實務是在非生產環境中測試規則,將 Action (動作) 設定為 Count (計數)。若要評估規則,請使用 Amazon CloudWatch 指標結合 AWS WAF 取樣請求或 AWS WAF 日誌。當規則如預期執行時,將 Action (動作) 變更為 Block (封鎖)。
檔案上傳遭到 WindowsShellCommands_BODY、GenericLFI_BODY,或 SizeRestrictions_BODY 規則封鎖
檔案上傳時建立 HTTP 封存 (HAR) 檔案。然後,檢查檔案中是否有觸發 WindowsShellCommands_BODY、GenericLFI_BODY 或 SizeRestrictions_BODY 規則。
若要允許 WindowsShellCommands_BODY、GenericLFI_BODY 或 SizeRestrictions_BODY 的誤判,請先將封鎖規則設為 Count (計數)。如需說明,請參閱將規則群組的評估結果覆寫為計數。
然後,為導致誤判的受管規則建立自訂規則:
- 開啟 AWS WAF console (AWS WAF 主控台)。
- 在導覽窗格中,選擇 AWS WAF。
- 選擇 Resources & protection packs (資源和保護套件)。
- 找到您的保護套件,然後選擇 Rules (規則) 旁的 View and edit (檢視和編輯)。
- 在右側窗格中,選擇 Add rules (新增規則)。
選擇 Custom rule (自訂規則),然後按一下 Next (下一步)。
再次選擇 Custom rule (自訂規則),然後按一下 Next (下一步)。 - 將規則 Action (動作) 更新為 BLOCK (封鎖)。
- 輸入您的規則名稱。
- 在 If a request (如果請求) 中,展開下拉式功能表並選擇 matches all the statements (AND) (符合所有陳述式 (AND))。
- 在 Statement 1 (陳述式 1) 中,完成以下內容:
在 Inspect (檢查) 中,選擇 Has a label (有標籤)。
在 Statement (陳述式),選擇 Label (標籤)。
在 Match key (比對索引鍵),輸入產生誤判的規則標籤。例如,如果 WindowsShellCommands_BODY 規則產生誤判,則輸入 awswaf:managed:aws:windows-os:WindowsShellCommands_Body。 - 在 Statement 2 (陳述式 2) 中,完成以下內容:
在 Inspect (檢查),選擇 URI path (URI 路徑)。在 Statement (陳述式) 下,於 Match type (比對類型) 選擇 Exactly matches string (完全相符字串)。
在 String to match (比對字串),輸入目前提出請求的 URI 路徑。
(選用) 在 Text transformation (文字轉換) 中,選擇 text transformation (文字轉換) 或 None (無)。
展開 Rule configuration (規則組態),在 Negate statement (NOT) (否定陳述式 (NOT)) 下,選擇 Negate statement results (否定陳述式結果)。 - 選擇 Create rule (建立規則)。
- 若要設定規則優先順序,請在右側窗格中選取 Edit Rule Order (編輯規則順序),然後將此規則拖曳到封鎖請求的受管規則群組下方。
- 選擇 Save Rule Order (儲存規則順序)。
**注意:**最佳實務是在非生產環境中測試規則,將 Action (動作) 設定為 Count (計數)。若要評估規則,請使用 CloudWatch 指標結合 AWS WAF 取樣請求或 AWS WAF 日誌。當規則如預期執行時,將 Action (動作) 變更為 Block (封鎖)。
允許封鎖檔案的其他選項
**注意:**規則會依照列出的順序處理。對於以下最佳實務,請根據需要重新排序規則優先順序。
根據您的使用案例選擇最佳方法:
- 使用 AWS WAF 字串比對規則陳述式或 AWS WAF Classic 字串比對條件套用選擇性排除。將與文件主體相關的特定字詞新增至安全清單。例如: 如果特定 URI 路徑上出現誤判,則將該路徑新增至安全清單中。
- 使用單獨的網域來上傳檔案。請確認這是否對您的使用案例來說是一種具有成本效益的選擇。
- 掃描 (清除) 檔案和影像以尋找內嵌程式碼和資料。您可以在上傳檔案之前在用戶端執行此動作。或者,如果您建立了排除規則,您可以在上傳檔案之後,在後端執行此動作。
- 在上傳檔案之前先進行壓縮。
**注意:**確保您未壓縮惡意檔案。 - 如果上傳來自已知 IP 位址範圍,請將這些 IP 位址新增至您的安全清單。
- 使用 base64 編碼對所有影像資料進行編碼,以便 AWS WAF 不會對影像調用 XSS 或 SQLi。
**注意:**確保您未對惡意影像進行編碼。 - 實作影像最佳化技術,例如區塊移除或位元隨機化。
