安全清单 security-checklist

本节介绍部署后确保 AEM 安装的安全性所需采取的各项步骤。建议按清单自上而下逐项执行。

NOTE
您还可参考开放 Web 应用程序安全项目(OWASP)发布的最严重安全威胁,以获取更多信息。
NOTE
在开发阶段,还适用一些其他安全注意事项

主要安全措施 main-security-measures

以生产就绪模式运行 AEM run-aem-in-production-ready-mode

有关更多信息,请参阅以生产就绪模式运行 AEM

为传输层安全性启用 HTTPS enable-https-for-transport-layer-security

必须在创作与发布实例上启用 HTTPS 传输层,方可保障实例的安全性。

NOTE
请参阅启用基于 SSL 的 HTTP 部分,以了解更多信息。

安装安全热修复补丁 install-security-hotfixes

请确认已安装 Adobe 提供的最新的安全热修复补丁

更改 AEM 与 OSGi 控制台管理员帐户的默认密码 change-default-passwords-for-the-aem-and-osgi-console-admin-accounts

Adobe 建议在安装完成后(适用于所有实例)更改具有特权的 AEM admin 帐户的密码。

这些帐户包括:

  • AEM 的 admin 帐户

    更改 AEM 管理员帐户密码后,访问 CRX 时请使用新密码。

  • OSGi 网页控制台的 admin 密码

    此更改同样适用于访问网页控制台的管理员帐户,请使用相同的新密码进行访问。

这两个帐户的凭据相互独立。为每个帐户设置不同且强度高的密码,对保障部署安全至关重要。

更改 AEM 管理员密码 changing-the-aem-admin-password

可通过 Granite 操作——用户控制台更改 AEM 管理员帐户的密码。

在此可编辑 admin 帐户并更改其密码

NOTE
更改该管理员帐户同时会影响 OSGi 网页控制台的帐户。在更改管理员帐户后,建议将 OSGi 帐户的凭据进一步修改为与之不同的密码。

更改 OSGi 网页控制台密码的重要性 importance-of-changing-the-osgi-web-console-password

除了 AEM 的 admin 帐户外,如未更改 OSGi 网页控制台的默认密码,可能会导致:

  • 服务器在启动与关闭期间(大型服务器可能持续数分钟)因使用了默认密码而暴露。
  • 当存储库宕机/重新启动捆绑包而 OSGi 仍在运行时,服务器处于暴露状态。

关于更改网页控制台密码的详细信息,请参见下文更改 OSGi 网页控制台管理员密码

更改 OSGi 网页控制台管理员密码 changing-the-osgi-web-console-admin-password

请更改用于访问网页控制台的密码。通过 OSGi 配置来更新 Apache Felix OSGi 管理控制台 ​的以下属性:

  • 用户名 ​和​ 密码:用于访问 Apache Felix Web 管理控制台的凭据。为确保实例安全,必须在初始安装​ 之后 ​更改该密码。
NOTE
有关配置 OSGi 设置的完整说明,请参见 OSGi 配置

更改 OSGi 网页控制台管理员密码的步骤

  1. 在​ 工具操作 ​菜单中,打开​ 网页控制台,进入​ 配置 部分。
    例如:<server>:<port>/system/console/configMgr

  2. 找到并打开 Apache Felix OSGi 管理控制台 ​的条目。

  3. 更改​ 用户名 ​和​ 密码

    chlimage_1-3

  4. 选择​ 保存

实施自定义错误处理程序 implement-custom-error-handler

Adobe 建议定义自定义错误处理页,特别是针对 404 与 500 等 HTTP 响应码,以防止敏感信息泄露。

NOTE
请参阅如何创建自定义脚本或错误处理程序,以了解更多详细信息。

完成 Dispatcher 安全清单 complete-dispatcher-security-checklist

AEM Dispatcher 是您基础架构中的关键组件。Adobe 建议完成 Dispatcher 安全清单

CAUTION
使用 Dispatcher 时,必须禁用 “.form” 选择器。

验证步骤 verification-steps

配置复制与传输用户 configure-replication-and-transport-users

在 AEM 标准安装流程中,默认复制代理会将 admin 作为传输凭据的用户。此外,创作系统上用于发起复制的用户也通常是 admin。

基于安全考虑,应根据实际使用场景更换上述帐户,并注意以下两点:

  • 传输用户 ​不得为管理员帐户。建议在发布系统上创建仅具备相应区域访问权限的用户,并使用该用户的凭据进行传输。

    您可从随附的 replication-receiver 用户着手,按需配置该用户的访问权限。

  • 复制用户 ​或​ 代理用户 ID 同样不能为管理员帐户,而是应为仅能查看复制内容的用户。复制用户用于在创作系统上收集待复制内容,然后再发送至发布者。

检查操作仪表板的安全健康检查 check-the-operations-dashboard-security-health-checks

AEM 6 引入了全新的操作仪表板,以帮助运维人员排障并监控实例健康状况。

该仪表板包含一系列安全健康检查。建议在生产实例上线前,检查所有安全健康检查的状态。如需了解更多信息,请参阅操作仪表板文档

检查示例内容是否仍存在 check-if-example-content-is-present

在对外开放前,应在生产系统上彻底卸载并删除所有示例内容与示例用户(如 Geometrixx 项目及其组件)。

NOTE
若实例以生产就绪模式运行,示例 We.Retail 应用程序会移除。如非上述情况,可以在包管理器中搜索并卸载所有 We.Retail 包以移除示例内容。

请参阅使用包

检查是否存在 CRX 开发用捆绑包 check-if-the-crx-development-bundles-are-present

在对外开放前,应在创作与发布生产系统上卸载以下开发用 OSGi 捆绑包:

  • Adobe CRXDE Support(com.adobe.granite.crxde-support)
  • Adobe Granite CRX Explorer(com.adobe.granite.crx-explorer)
  • Adobe Granite CRXDE Lite(com.adobe.granite.crxde-lite)

检查是否存在 Sling 开发用捆绑包 check-if-the-sling-development-bundle-is-present

AEM 开发人员工具会部署 Apache Sling Tooling Support Install(org.apache.sling.tooling.support.install)。

在对外开放前,应在创作与发布生产系统上卸载该 OSGi 捆绑包。

防止出现跨站点请求伪造 protect-against-cross-site-request-forgery

CSRF 保护框架 the-csrf-protection-framework

自 AEM 6.1 起,系统内置名为 CSRF 防护框架 ​的机制,用于抵御跨站点请求伪造攻击。有关使用方法的更多信息,请参加相关文档

Sling 反向链接过滤器 the-sling-referrer-filter

为解决 CRX WebDAV 和 Apache Sling 中已知的跨站点请求伪造(CSRF)安全问题,需要配置以启用反向链接过滤器。

反向链接过滤器服务是一个 OSGi 服务,该服务允许您配置以下内容:

  • 需要被过滤的 HTTP 方法

  • 是否允许空的反向链接头

  • 以及除当前服务器主机外允许的服务器列表。

    默认情况下,所有 localhost 的变体以及服务器绑定的当前主机名均在允许列表中。

要配置反向链接过滤器服务:

  1. 在以下地址打开 Apache Felix 控制台(配置):

    https://<server>:<port_number>/system/console/configMgr

  2. admin 身份登录。

  3. 在​ 配置 ​菜单中选择:

    Apache Sling Referrer Filter

  4. Allow Hosts 字段中输入所有允许作为反向链接的主机。每个条目必须采用以下格式:

    <protocol>://<server>:<port>

    例如:

    • https://allowed.server:80 允许来自该服务器指定端口的所有请求。
    • 若还需允许 https 请求,必须另起一行单独输入。
    • 若要允许该服务器的所有端口,可以使用 0 作为端口号。
  5. 如需允许空的或缺失的反向链接头,请勾选 Allow Empty 字段。

    note caution
    CAUTION
    Adobe 建议在使用 cURL 等命令行工具时提供反向链接,而非允许空值,否则可能使系统暴露于 CSRF 攻击风险中。
  6. Filter Methods 字段中编辑过滤器用于检查的方法。

  7. 单击​ 保存 ​以保存更改。

OSGI 设置 osgi-settings

某些 OSGi 设置默认启用,以便于对应用程序进行调试。在发布与创作生产实例上应修改这些设置,以避免内部信息泄露。

NOTE
Day CQ WCM 调试筛选条件 ​外,下列所有设置均已由生产就绪模式自动覆盖。因此,Adobe 建议在生产环境部署实例之前,检查所有相关设置。

对于以下每项服务,都必须更改指定的设置:

请参阅 OSGi 配置设置

在使用 AEM 时,可通过多种方式管理这些服务的配置设置。有关更多详情与最佳做法,请参阅配置 OSGi

进一步阅读 further-readings

缓解拒绝服务(DoS)攻击 mitigate-denial-of-service-dos-attacks

拒绝服务(DoS)攻击是指试图使计算机资源对预期用户不可用的行为。此类攻击通常通过资源过载来实现,例如:

  • 来自外部源的请求洪流。

  • 请求超出系统可正常提供的信息量。

    例如,请求整个存储库的 JSON 展现方案。

  • 通过请求一个包含无限数量 URL 的内容页面,URL 可以包含一个句柄、一些选择器、一个扩展名和一个后缀,其中任何一项都可以进行修改。

    例如,.../en.html 可被请求为:

    • .../en.ExtensionDosAttack
    • .../en.SelectorDosAttack.html
    • .../en.html/SuffixDosAttack

    所有有效变体(例如返回 200 响应并配置为可缓存)都会被 Dispatcher 缓存,最终可能导致文件系统被填满,从而无法处理进一步请求。

防止此类攻击的配置点很多,这里仅讨论与 AEM 相关的部分。

配置 Sling 以防止 DoS 攻击

Sling 采用​ 以内容为中心 ​的框架。每个 HTTP 请求都会以 JCR 资源(存储库节点)的形式映射到内容上,因此处理流程会围绕内容展开:

  • 首个目标是存放内容的资源(JCR 节点)。
  • 其次,系统会根据请求的部分内容(如选择器和/或扩展名)以及资源属性定位渲染器或脚本。

请参阅 Sling 请求处理,以了解更多信息。

这种方式使 Sling 功能强大且灵活,但必须谨慎管理这种灵活性。

为防止滥用 DoS,可采取以下措施:

  1. 在应用程序层面引入控制。由于可能存在大量变体,默认配置不可行。

    在应用程序中应当:

    • 控制应用程序中的选择器, ​提供明确需要的选择器,并对其他选择器一律返回 404
    • 防止输出无限数量的内容节点。
  2. 检查默认渲染器的配置,因为它们可能成为问题来源。

    • 尤其是 JSON 渲染器会跨多个层级遍历树结构。

      例如,该请求:

      http://localhost:4502/.json

      可能将整个存储库导出为 JSON 展现方案,从而引发严重的服务器问题。因此,Sling 对最大结果数设有限制。要限制 JSON 渲染的深度,请为以下属性设置值:

      JSON 最大结果数json.maximumresults

      位于 Apache Sling GET Servlet 的配置中。超过该限制时,渲染会被中止。AEM 中 Sling 的默认值为 1000

    • 作为预防措施,应禁用其他默认渲染器(HTML、纯文本、XML)。同样通过配置Apache Sling GET Servlet 实现。

    note caution
    CAUTION
    请勿禁用 JSON 渲染器,因为 AEM 的正常运行依赖于它。
  3. 使用防火墙来过滤对实例的访问。

    • 必须使用操作系统级别的防火墙来过滤对实例中各点的访问,因为如果不加以保护,这些访问可能会导致拒绝服务攻击。

缓解因使用表单选择器引发的 DoS 攻击

NOTE
仅当 AEM 环境未使用 Forms 时,才应执行此缓解措施。

由于 AEM 并未为 FormChooserServlet 提供开箱即用的索引,在查询中使用表单选择器可能会触发代价高昂的存储库遍历,而这通常会导致 AEM 实例停滞。表单选择器可通过查询是否存在 &ast;.form.&ast; 字符串来识别。

要缓解此问题,可以执行以下步骤:

  1. 通过在浏览器中访问 https://<serveraddress>:<serverport>/system/console/configMgr 来打开网页控制台

  2. 搜索 Day CQ WCM 表单选择器 Servlet

  3. 点击该条目后,在以下窗口中禁用​ 高级搜索要求

  4. 单击​ 保存

缓解因资产下载 Servlet 引发的 DoS 攻击

默认的资产下载 Servlet 允许已验证的用户发起任意规模的并发下载请求,以创建资产的 ZIP 文件。生成大型 ZIP 压缩包可能会导致服务器与网络过载。为降低此行为带来的潜在的拒绝服务(DoS)风险,Experience Manager 的发布实例默认禁用 AssetDownloadServlet OSGi 组件。但在 Experience Manager 作者实例上则默认启用。

若无需下载功能,请在创作与发布部署中均禁用该 Servlet。如果您的环境必须启用资产下载功能,请参见从 Adobe Experience Manager 下载资产,以获取更多信息。此外,您还可以为部署定义可承受的最大下载限制。

禁用 WebDAV disable-webdav

可在创作与发布环境中停止相关 OSGi 捆绑包来禁用 WebDAV。

  1. 连接到正在以下位置运行的 Felix 管理控制台

    https://<*host*>:<*port*>/system/console

    例如 http://localhost:4503/system/console/bundles

  2. 在捆绑包列表中找到以下名称的捆绑包:

    Apache Sling Simple WebDAV Access to repositories (org.apache.sling.jcr.webdav)

  3. 在“操作”列中点击“停止”按钮即可停止该捆绑包。

  4. 同样,在捆绑包列表中找到以下名称的捆绑包:

    Apache Sling DavEx Access to repositories (org.apache.sling.jcr.davex)

  5. 点击“停止”按钮停止该捆绑包。

    note note
    NOTE
    无需重启 AEM。

确认您未在用户主路径中泄露个人身份信息 verify-that-you-are-not-disclosing-personally-identifiable-information-in-the-users-home-path

确保存储库用户主路径中不会暴露任何个人身份信息,这是保护用户的重要措施。

自 AEM 6.1 起,用户(即可授权)ID 节点名称的存储方式已通过新的 AuthorizableNodeName 接口实施。该新接口不再在节点名中暴露用户 ID,而是生成随机名称。

无需额外配置,因为该方式已成为 AEM 生成可授权 ID 的默认方式。

尽管不推荐,但如需与现有应用程序保持向后兼容,可禁用该功能以恢复旧的实施。如需禁用,请执行以下操作:

  1. 进入网页控制台,在 Apache Jackrabbit Oak SecurityProvider 中的 requiredServicePids 属性里移除** org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName** 条目。

    您也可在 OSGi 配置中查找 org.apache.jackrabbit.oak.security.internal.SecurityProviderRegistration PID 来定位 Oak 安全提供商。

  2. 在网页控制台中删除 Apache Jackrabbit Oak 随机可授权节点名称 OSGi 配置。

    为方便查找,该配置的 PID 为 org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName

NOTE
若要了解更多信息,请参阅 Oak 文档生成可授权节点名称

匿名权限强化包 anonymous-permission-hardening-package

默认情况下,AEM 会将系统元数据(如 jcr:createdByjcr:lastModifiedBy)作为节点属性与常规内容一并存储在存储库中。根据配置与访问控制设置的不同,在某些情况下这可能会导致个人身份信息(PII)暴露,例如当此类节点以原始 JSON 或 XML 形式渲染时。

与所有存储库数据一样,这些属性由 Oak 授权栈介导。应遵循最小权限原则限制对这些属性的访问。

为此,Adobe 提供了一个权限强化包,供客户在此基础上进一步扩展。该强化包通过在存储库根目录安装一条“拒绝”访问控制项,限制匿名用户访问常用系统属性。此包可在所有受支持的 AEM 版本中下载并安装。

为说明这些变化,以下对比展示了安装该包前后匿名用户可查看的节点属性:

安装包之前

以及安装包后可查看的属性,其中 jcr:createdByjcr:lastModifiedBy 已不可见:

安装包之后

有关更多信息,请参阅该包的发行说明。

防御点击劫持攻击 prevent-clickjacking

若要防御点击劫持攻击,Adobe 建议您将 Web 服务器配置为将 X-FRAME-OPTIONS HTTP 标头集提供给 SAMEORIGIN

有关点击劫持攻击的更多信息,请参阅 OWASP 网站

确保在需要时正确复制加密密钥 make-sure-you-properly-replicate-encryption-keys-when-needed

某些 AEM 功能与身份验证机制要求在所有 AEM 实例间复制加密密钥。

在执行之前请注意,不同版本的密钥复制方式不同,因为 6.3 与更早版本存储密钥的方式不同。

有关详细信息,请参阅下文。

在 AEM 6.3 中复制密钥 replicating-keys-for-aem

在早期版本中,复制密钥存储在存储库中;而从 AEM 6.3 起,密钥存储在文件系统中。

因此,要在实例间复制密钥,需要将其从源实例复制到目标实例文件系统中的相应位置。

具体步骤如下:

  1. 访问包含要复制的密钥材料的 AEM 实例(通常是作者实例);

  2. 在本地文件系统中找到 com.adobe.granite.crypto.file 捆绑包。例如,路径如下:

    • <author-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21

    每个文件夹内的 bundle.info 文件标识了对应的捆绑包名称。

  3. 进入数据文件夹。例如:

    • <author-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21/data
  4. 复制 HMAC 与主文件。

  5. 随后进入要复制 HMAC 密钥的目标实例,并导航到数据文件夹。例如:

    • <publish-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21/data
  6. 粘贴先前复制的两个文件。

  7. 如果目标实例已在运行,请刷新加密包

  8. 对所有需要复制密钥的实例重复上述步骤。

在 AEM 6.2 及更早版本中复制密钥 replicating-keys-for-aem-and-older-versions

在 AEM 6.2 及更早版本中,密钥存储于存储库的 /etc/key 节点下。

推荐的安全做法是仅复制该节点,以在实例间复制密钥。您可以通过 CRXDE Lite 有选择地复制节点:

  1. 通过访问 https://&lt;serveraddress&gt;:4502/crx/de/index.jsp 来打开 CRXDE Lite
  2. 选择 /etc/key 节点。
  3. 切换到​ 复制 ​选项卡。
  4. 点击​ 复制 ​按钮。

执行渗透测试 perform-a-penetration-test

Adobe 建议在进入生产环境前对您的 AEM 基础架构执行渗透测试。

开发最佳做法 development-best-practices

新开发的项目必须遵循安全性最佳做法,以确保 AEM 环境的安全性。

recommendation-more-help
19ffd973-7af2-44d0-84b5-d547b0dffee2