在AEM Dispatcher中限制和允許HTTP方法
HTTP方法(例如OPTIONS、POST、PUT和DELETE)可能會在AEM中的Dispatcher層級遭到封鎖或錯誤公開。 這可能會中斷CORS預檢請求、在發佈上公開Sling POST行為,或在公用端點接受不安全方法時產生安全性發現。 問題通常來自廣泛封鎖OPTIONS的舊版Dispatcher規則,或是遺失允許不安全的POST請求到達發佈頁面的拒絕篩選器。 檢閱Dispatcher篩選器,僅在必要時允許OPTIONS,並明確封鎖不安全的方法和Sling POST作業。
說明 description
環境
- Adobe Experience Manager as a Cloud Service
- AEM Managed Services
- Adobe Experience Manager On-Premise
問題/症狀
- 已在Dispatcher封鎖
OPTIONS個要求。 - 對DAM或
.json資源的POST請求傳回200 OK並公開Sling POST操作。 PUT或DELETE要求只會在具有405 Method Not Allowed的AEMaaCS中繼或生產環境中失敗。- 安全性掃描報告公開的方法,例如接受
POST或顯示OPTIONS的公開頁面。
原因
舊版Dispatcher安全性規則通常會封鎖OPTIONS以防止動詞竄改,而缺少或過度寬鬆的篩選器可能會允許不安全的POST、PUT或DELETE請求存取AEM Publish。 這會公開公開公開公開端點上的Sling POST行為。 在AEM as a Cloud Service Stage and Production中,也可以刻意封鎖PUT和DELETE以保護存放庫完整性。
解決方法 resolution
若要在Dispatcher圖層解析封鎖或公開的HTTP方法,請執行下列步驟:
- 透過
OPTIONS、POST、PUT或DELETE測試受影響的端點,找出不正確允許或封鎖的方法。 - 請檢閱Dispatcher篩選器並加以更新,以明確允許安全的方法,並明確拒絕不安全的方法。
- 使用類似下列範例的篩選規則,並加以調整以符合您的環境中所需的確切路徑和方法。
/deny-post { /type "deny" /method "POST" /extension '(css|png|pdf|jpg|js)' }
/deny-operation { /type "deny" /method "POST" /url ".*:operation.*" }
/allow-options-cors { /type "allow" /method "OPTIONS" /url "/graphql*" }
- 如果您使用AEM Managed Services或On-Premise,請檢閱
dispatcher.any,並視需要在Apache HTTPD限制不應該接受的方法的路徑。 - 使用與以下範例類似的Apache HTTPD限制,其中需要在網頁伺服器層封鎖方法。
<Limit OPTIONS>
Order deny,allow
Deny from all
</Limit>
- 套用路徑特定規則,只允許選取的方法。
/0035 { /type "allow" /method "GET" /url "/libs/granite/security/currentuser.json*" }
/0036 { /type "deny" /method "DELETE" /url "/libs/granite/security/currentuser.json*" }
- 僅允許在需要CORS預檢的端點上使用
OPTIONS,例如GraphQL或SPA API路由,而不是廣泛啟用。 - 如果Sling POST行為在發佈上公開,請為作業型
POST請求新增拒絕規則,並將其置於更廣的允許規則之後,以便最終比對會封鎖請求。 - 對於AEMaaCS中繼和生產環境,如果在您確認Dispatcher設定後
PUT或DELETE請求出現意外行為,請聯絡Adobe支援。 - 重新測試受影響的端點,並確認封鎖的方法會傳回預期的
403、404或405回應,而所需的OPTIONS要求只會在預期的端點上成功。
相關閱讀
recommendation-more-help
experience-cloud-kcs-help-kbarticles