安全清单

本节介绍您应采取的各种步骤,以确保部署时的AEM安装是安全的。 清单应自上而下应用。

注意
注意

在开发阶段还有一些其他安全注意事项

主要安全措施

在生产就绪模式中运行AEM

有关详细信息,请参阅在生产就绪模式中运行AEM

为传输层安全性启用HTTPS

对于具有安全实例,必须在作者实例和发布实例上启用HTTPS传输层。

注意

有关详细信息,请参阅启用HTTP over SSL部分。

安装安全修补程序

确保您已安装Adobe🔗提供的最新安全修补程序。

更改AEM和OSGi Console管理帐户的默认密码

Adobe强烈建议在安装后更改特权​AEM admin帐户的密码(在所有实例上)。

这些帐户包括:

  • AEM admin帐户

    更改AEM管理员帐户的密码后,您在访问CRX时将需要使用新密码。

  • OSGi Web控制台的admin密码

    此更改还将应用于用于访问Web控制台的管理员帐户,因此您在访问该控制台时需要使用相同的密码。

这两个帐户使用不同的凭据,并且每个帐户都具有不同的强口令,这对于安全部署至关重要。

更改AEM管理员密码

可以通过Granite Operations - Users控制台更改AEM管理帐户的口令。

您可以在此编辑admin帐户并更改密码🔗

注意

更改管理员帐户也会更改OSGi Web控制台帐户。 更改管理员帐户后,您应将OSGi帐户更改为其他帐户。

更改OSGi Web控制台密码的重要性

除AEM admin帐户外,如果无法更改OSGi Web控制台密码的默认密码,则可能导致:

  • 在启动和关闭期间使用默认密码暴露服务器(对于大型服务器可能需要几分钟);
  • 当存储库关闭/重新启动捆绑包且OSGI正在运行时,服务器的暴露。

有关更改Web控制台密码的详细信息,请参阅下面的更改OSGi Web控制台管理员密码

更改OSGi Web控制台管理员密码

您还必须更改用于访问Web控制台的口令。 要完成此操作,请配置Apache Felix OSGi管理控制台的以下属性:

户名 称和密​码,用于访问Apache Felix Web管理控制台本身的凭据。初始安装后必须更改密码,以确保实例的安全性。

要执行此操作:

  1. 导航到位于<server>:<port>/system/console/configMgr的Web控制台。

  2. 导航到​Apache Felix OSGi管理控制台​并更改​用户名​和​密码

    chlimage_1-3

  3. 单击​保存

实现自定义错误处理程序

Adobe建议定义自定义错误处理程序页,特别是404和500 HTTP响应代码,以防止信息泄露。

注意

有关更多详细信息,请参阅如何创建自定义脚本或错误处理程序知识库文章。

完整的调度程序安全核对清单

AEM Dispatcher是您的基础架构的关键部分。 Adobe强烈建议您完成调度程序安全核对清单

注意

使用调度程序时,必须禁用“.form”选择器。

验证步骤

配置复制和传输用户

AEM的标准安装将admin指定为默认复制代理内传输凭据的用户。 此外,管理员用户还用于在作者系统上源复制。

出于安全考虑,应对这两点进行更改,以反映手头的具体用例,同时考虑到以下两个方面:

  • 传输用户​不应是管理用户。 而是在发布系统上设置仅对发布系统的相关部分具有访问权限的用户,并将该用户的凭据用于传输。

    您可以从捆绑的复制接收者用户进行开始,并配置此用户的访问权限以匹配您的情况

  • 复制用户​或​代理用户Id​也不应是管理员用户,而应是只能查看应复制内容的用户。 复制用户用于收集要在创作系统上复制的内容,然后再将其发送到发布者。

检查操作仪表板安全运行状况检查

AEM 6引入了新的“操作”仪表板,旨在帮助系统操作员解决问题并监控实例的运行状况。

该仪表板还附带一系列安全运行状况检查。 建议您在与生产实例一起上线之前检查所有安全运行状况检查的状态。 有关详细信息,请查阅操作仪表板文档

检查示例内容是否存在

所有示例内容和用户(例如Geometrixx项目及其组件)都应在生产系统上完全卸载并删除,然后才能公开访问。

注意

如果此实例在生产就绪模式中运行,则删除示例We.Retail应用程序。 如果由于任何原因,不是这样,您可以通过转到“包管理器”,然后搜索并卸载所有We.Retail包来卸载示例内容。 有关详细信息,请参阅使用包

检查CRX开发包是否存在

应先在创作和发布生产系统上卸载这些开发OSGi捆绑包,然后再使其可供访问。

  • Adobe CRXDE支持(com.adobe.granite.crxde支持)
  • Adobe Granite CRX Explorer(com.adobe.granite.crx-explorer)
  • Adobe GraniteCRXDE Lite(com.adobe.granite.crxde-lite)

检查Sling开发包是否存在

适用于Eclipse的AEM Developer Tools部署了Apache Sling工具支持安装(org.apache.sling.tooliping.support.install)。

应在创作和发布生产系统上卸载此OSGi捆绑包,然后再使其可访问。

Protect反跨站点请求伪造

CSRF保护框架

AEM 6.1附带一种有助于防止跨站点请求伪造攻击的机制,称为​CSRF保护框架。 有关如何使用它的详细信息,请查阅文档

Sling推荐人滤镜

要解决CRX WebDAV和Apache Sling中跨站点请求伪造(CSRF)的已知安全问题,您需要为推荐人过滤器添加配置以使用它。

推荐人过滤器服务是允许您配置的OSGi服务:

  • 应过滤哪些http方法

  • 是否允许空推荐人标头

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

    默认情况下,绑定到服务器的localhost和当前主机名的所有变体都在列表中。

要配置推荐人筛选器服务,请执行以下操作:

  1. 在以下位置打开Apache Felix控制台(Configurations):

    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字段。

    注意

    建议在使用命令行工具(如cURL)时提供推荐人,而不是允许空值,因为该值可能会使您的系统遭受CSRF攻击。

  6. 编辑此过滤器应用于Filter Methods字段检查的方法。

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

OSGI设置

默认情况下,会设置一些OSGI设置,以便更轻松地调试应用程序。 您需要在发布和创作生产实例时更改这些内容,以避免内部信息泄露给公众。

注意

除​**“Day CQ WCM调试过滤器**”之外,以下所有设置都自动由生产就绪模式覆盖。 因此,我们建议在高效环境部署实例之前先查看所有设置。

对于以下每项服务,需要更改指定的设置:

有关详细信息,请参阅OSGi配置设置

使用AEM时,有多种方法可管理此类服务的配置设置;请参阅配置OSGi以了解更多详细信息和建议的做法。

进一步读数

缓解拒绝服务(DoS)攻击

拒绝服务(DoS)攻击是使计算机资源对其目标用户不可用的尝试。 这通常是通过使资源超载实现的;例如:

  • 来自外部源的大量请求。

  • 请求的信息比系统可以成功传送的信息要多。

    例如,整个存储库的JSON表示形式。

  • 通过请求具有不限数量URL的内容页面,URL可以包括句柄、某些选择器、扩展和后缀 — 其中任何一个都可以修改。

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

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

    调度程序将对所有有效变量(例如返回200响应并配置为缓存)进行缓存,最终导致完整文件系统,并且不提供任何服务用于进一步请求。

有许多用于防止此类攻击的配置点,此处仅讨论与AEM直接相关的攻击。

配置Sling以防止DoS

Sling是​以内容为中心。 这意味着,当每个(HTTP)请求以JCR资源(存储库节点)的形式映射到内容时,处理将侧重于内容:

  • 第一个目标是保存内容的资源(JCR节点)。
  • 其次,渲染器或脚本是与请求的某些部分(例如,选择器和/或扩展)组合从资源属性中定位的。
注意

这在Sling请求处理中有更详细的介绍。

这种方法使Sling非常强大且非常灵活,但一如既往,需要谨慎管理的灵活性。

为防止DoS滥用,您可以:

  1. 在应用程序级别加入控件;由于可能的变量数,默认配置不可行。

    在您的应用程序中,您应:

    • 控制应用程序中的选择器,以便您​​提供所需的显式选择器,并为所有其他选择器返回404
    • 防止输出不限数量的内容节点。
  2. 检查默认呈示器的配置,该呈示器可能是问题区域。

    • 尤其是可以跨多个级别横向树结构的JSON渲染器。

      例如,请求:

      http://localhost:4502/.json

      可以将整个存储库转储为JSON表示形式。 这会导致严重的服务器问题。 因此,Sling会设置最大结果数的限制。 要限制JSON渲染的深度,您可以为以下对象设置值:

      JSON最大结果 ( json.maximumresults)

      中。 🔗超过此限制时,渲染将折叠。 AEM中的Sling的默认值为200

    • 作为预防措施,禁用其他默认呈示器(HTML、纯文本、XML)。 同样,通过配置Apache SlingGETServlet

    注意

    请勿禁用JSON渲染器,这是AEM正常操作所必需的。

  3. 使用防火墙过滤对实例的访问。

    • 必须使用操作系统级防火墙,以便过滤对实例中可能导致拒绝服务攻击的点的访问(如果保留不受保护)。

缓解使用表单选择器导致的问题

注意

此缓解措施应仅对未使用Forms的AEM环境执行。

由于AEM不为FormChooserServlet提供开箱即用索引,在查询中使用表单选择器将触发代价高昂的存储库遍历,通常会使AEM实例陷入停顿。 表单选择器可以通过存在​&ast;.form来检测。&ast;​字符串(查询)。

为减轻这种情况,请执行以下步骤:

  1. 通过将浏览器指向​https://<serveraddress>:<serverport>/system/console/configMgr,转到Web控制台

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

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

  4. 单击​保存

缓解由资产下载Servlet引起的DoS

AEM中的默认资产下载Servlet允许经过身份验证的用户发出任意大小的并发下载请求,以创建对他们可见的资产的ZIP文件,这些文件可能会使服务器和/或网络过载。

为了减轻由此功能导致的潜在DoS风险,默认情况下,对于最新AEM版本上的发布实例,AssetDownloadServlet OSGi组件处于禁用状态。

如果您的设置要求启用资产下载服务器,请参阅此文章以了解详细信息。

禁用WebDAV

应在创作和发布环境上禁用WebDAV。 可通过停止相应的OSGi包来完成此操作。

  1. 连接到运行于以下位置的​Felix Management Console:

    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. 单击“停止”按钮以停止此捆绑。

    注意

    不需要重新启动AEM。

验证您没有在用户主路径中披露个人可识别信息

务必确保不在存储库用户主路径中公开任何个人身份信息,以保护您的用户。

自AEM 6.1起,用户(也称为可授权)ID节点名称的存储方式随AuthorizableNodeName接口的新实现而改变。 新界面将不再在节点名称中显示用户ID,而是生成随机名称。

不需要执行任何配置来启用它,因为这是在AEM中生成可授权ID的默认方式。

尽管不建议使用,但您可以禁用它,以备需要旧实现以向后兼容现有应用程序时使用。 为此,您需要:

  1. 转到Web控制台,从​Apache Jackrabbit Oak SecurityProvider​中的属性​requiredServicePids​中删除 org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName​条目。

    您还可以通过在OSGi配置中查找​org.apache.jackrabbit.oak.security.internal.SecurityProviderRegistration PID来查找Oak安全提供商。

  2. 从Web控制台中删除​Apache Jackrabbit Oak Random Authorizable Node Name OSGi配置。

    为便于查找,请注意,此配置的PID为​org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName

注意

有关详细信息,请参阅可授权节点名称生成的Oak文档。

防止Clickjacking

为防止点击劫持,我们建议您将Web服务器配置为提供设置为SAMEORIGINX-FRAME-OPTIONS HTTP头。

有关clickjacking的更多信息,请参阅OWASP站点

确保在需要时正确复制加密密钥

某些AEM功能和身份验证方案要求您在所有AEM实例中复制加密密钥。

在执行此操作之前,请注意,密钥复制在不同版本之间的操作方式不同,因为6.3和旧版本之间存储密钥的方式不同。

有关更多信息,请参阅以下内容。

复制AEM 6.3的密钥

而在旧版本中,复制密钥存储在存储库中,从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. 如果目标实 例已在运行,请刷新Crypto Bundle。

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

注意

在您首次安装AEM时,可通过添加以下参数,还原到6.3之前存储密钥的方法:

-Dcom.adobe.granite.crypto.file.disable=true

复制AEM 6.2及更早版本的密钥

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

在实例中安全复制密钥的建议方法是仅复制此节点。 您可以通过CRXDE Lite有选择地复制节点:

  1. 通过转到​https://<serveraddress>:4502/crx/de/index.jsp​打开CRXDE Lite
  2. 选择/etc/key节点。
  3. 转到​复制​选项卡。
  4. 按​复制​按钮。

执行渗透测试

Adobe强烈建议在开始生产之前对AEM基础架构执行渗透测试。

开发最佳实践

新开发必须遵循安全最佳实践,以确保AEM环境安全。

On this page

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now