在AEM Dispatcher中限制和允许HTTP方法

HTTP方法(如OPTIONSPOSTPUTDELETE)可能会在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操作。
  • PUTDELETE请求仅在AEMaaCS暂存或具有405 Method Not Allowed的生产环境中失败。
  • 安全扫描报告公开的方法,如接受POST或显示OPTIONS的公共页面。

原因

旧版Dispatcher安全规则通常会阻止OPTIONS以防止动词篡改,而缺少过滤器或过度宽松的过滤器可能会允许不安全的POSTPUTDELETE请求访问AEM Publish。 这会公开公共端点上的Sling POST行为。 在AEM as a Cloud Service Stage and Production中,还可以刻意阻止PUTDELETE以保护存储库完整性。

解决方法 resolution

要解决Dispatcher层上被阻止或公开的HTTP方法,请执行以下步骤:

  1. 使用OPTIONSPOSTPUTDELETE测试受影响的端点,从而识别哪些方法被错误允许或阻止。
  2. 查看Dispatcher筛选器并更新它们,以便明确允许安全方法,并明确拒绝不安全方法。
  3. 使用类似于以下示例的过滤器规则,并调整它们以匹配环境中所需的确切路径和方法。
/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*" }
  1. 如果您使用AEM Managed Services或内部部署,请查看dispatcher.any,并根据需要限制Apache HTTPD中的方法以查找不应接受这些方法的路径。
  2. 使用与以下示例类似的Apache HTTPD限制,其中需要在Web服务器层阻止方法。
<Limit OPTIONS>
Order deny,allow
Deny from all
</Limit>
  1. 应用特定于路径的规则,其中只允许使用选定的方法。
/0035 { /type "allow" /method "GET" /url "/libs/granite/security/currentuser.json*" }
/0036 { /type "deny" /method "DELETE" /url "/libs/granite/security/currentuser.json*" }
  1. 仅在需要CORS预检的端点上允许OPTIONS,例如GraphQL或SPA API路由,而不是广泛启用。
  2. 如果Publish上公开Sling POST行为,请为基于操作的POST请求添加拒绝规则,并将其放在更广泛的允许规则之后,以便最终匹配会阻止该请求。
  3. 对于AEMaaCS暂存和生产环境,如果在您确认Dispatcher配置后PUTDELETE请求出现意外行为,请联系Adobe支持
  4. 重新测试受影响的端点,并确认阻止的方法返回预期的403404405响应,而所需的OPTIONS请求仅在目标端点上成功。

相关阅读

recommendation-more-help
experience-cloud-kcs-help-kbarticles