在AEM Dispatcher中限制和允许HTTP方法
HTTP方法(如OPTIONS、POST、PUT和DELETE)可能会在AEM的Dispatcher层被阻止或错误地公开。 这可能会破坏CORS预检请求,在发布时公开Sling POST行为,或者在公共端点接受不安全方法时产生安全调查结果。 问题通常来自广泛阻止OPTIONS的旧版Dispatcher规则,或者来自缺少允许不安全的POST请求到达Publish的拒绝过滤器。 查看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请求仅在AEMaaCS暂存或具有405 Method Not Allowed的生产环境中失败。- 安全扫描报告公开的方法,如接受
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或内部部署,请查看
dispatcher.any,并根据需要限制Apache HTTPD中的方法以查找不应接受这些方法的路径。 - 使用与以下示例类似的Apache HTTPD限制,其中需要在Web服务器层阻止方法。
<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路由,而不是广泛启用。 - 如果Publish上公开Sling POST行为,请为基于操作的
POST请求添加拒绝规则,并将其放在更广泛的允许规则之后,以便最终匹配会阻止该请求。 - 对于AEMaaCS暂存和生产环境,如果在您确认Dispatcher配置后
PUT或DELETE请求出现意外行为,请联系Adobe支持。 - 重新测试受影响的端点,并确认阻止的方法返回预期的
403、404或405响应,而所需的OPTIONS请求仅在目标端点上成功。
相关阅读
recommendation-more-help
experience-cloud-kcs-help-kbarticles