Skip To Content

安全性最佳做法

在保护 ArcGIS Server 时,务必使 ArcGIS Server 也在安全环境下运行。 可遵循多种最佳做法,以确保获得最高安全性。

请求并配置自己的服务器证书

ArcGIS Server 预先配置了自签名的证书,这样,可初始测试服务器并帮助您快速验证是否安装成功。 然而,在大多数情况下,组织在使用服务器之前需要从受信任的证书颁发机构 (CA) 请求证书并配置服务器。 这可能是由您的组织颁发的域证书或 CA 签名的证书。

ArcGIS Server 类似,ArcGIS Enterprise 门户也包含预先配置的自签名证书。 如果要将您的站点与门户联合,则从受信任的 CA 请求证书并配置门户以进行使用。

配置来自受信任颁发机构的证书对于基于 Web 的系统来说是一种安全的方法,且可避免用户遇到任何浏览器发出的警告或其他异常行为。 如果在测试期间使用 ArcGIS ServerArcGIS Enterprise 门户随附的自签名证书,则将遇到以下问题:

  • 有关不受信任站点的 Web 浏览器、ArcGIS DesktopArcGIS Pro 警告。 通常,Web 浏览器遇到自签名证书时会显示警告消息并要求您确认是否继续前往该站点。 只要您使用自签名证书,许多浏览器就会显示警告图标或对地址栏标红。
  • 无法在门户的 Map ViewerMap Viewer 经典版 中打开联合服务、无法将受保护的服务项目添加到门户、无法在联合服务器中登录到 ArcGIS Server Manager 以及无法从 ArcGIS for Office 连接到门户。
  • 配置实用程序服务、打印托管服务以及从客户端应用程序访问门户时出现异常行为。
警告:

以上使用自签名证书时将遇到的问题列表并不详尽。 必须使用 CA 签名证书全面测试和部署门户。

有关如何使用 CA 签名证书配置 ArcGIS Enterprise 的说明,请参阅以下主题:

扫描跨站点脚本攻击

跨站点脚本 (XSS) 攻击会在现有网页中加入并运行代码。 攻击者通常诱骗受害者打开包含攻击者提供的数据或输入的该页面。 在 ArcGIS Server 站点中,该输入或数据可以是由要素服务返回的要素。

ArcGIS Server 可以扫描要素中是否存在潜在的 XSS 攻击。 当通过要素服务添加或更新要素时以及当将要素发送到客户端应用程序时,它可以对这些要素进行扫描。 但是,扫描要素中是否存在恶意代码时,可能导致误报或禁用要素中包含的 HTML 弹出窗口的合法 HTML。 可以按服务对扫描行为进行配置。

默认情况下,在服务创建后,通常将它们配置为扫描编辑中是否存在潜在的脚本并阻止它们,但不会扫描已从要素服务中检索的要素。 攻击者可通过将要素编辑成跳过扫描来绕过这种编辑扫描,例如通过 SQL 直接编辑数据库。 最安全的做法是将服务配置为扫描所有要素。 扫描检索到的每个要素中是否存在脚本可能会降低性能,但建议采用这种安全做法。

逐个服务更改值可能加大管理难度,因此,首选方法是使用 featureServiceXSSFilter 属性定义一个默认值。 此系统属性在创建服务时使用。 它对现有服务没有影响,可以在服务创建后对其进行覆盖。

要设置此系统属性,请登录到 ArcGIS Server Administrator Directory,然后单击系统 > 属性。 属性由 JSON 对象表示。 复制现有 JSON 对象,然后通过向该现有 JSON 对象添加 featureServiceXSSFilter 属性对其进行修改。

featureServiceXSSFilter 属性可以设置为 inputinputOutputinput 值为默认值;用于指示 ArcGIS Server 将新要素服务配置为扫描编辑。 inputOutput 值指示 ArcGIS Server 将新要素服务配置为扫描编辑和返回的要素。

要覆盖特定的服务设置,必须使用 ArcGIS Server Administrator Directory,找到该特定服务,然后进行编辑。 在单个要素服务上使用的三个属性如下:

  • xssPreventionEnabled 可用于扫描要素中是否存在脚本和代码。 将其设置为 true
  • xssPreventionRule 可以设置为 inputinputOutput。 始终会扫描编辑,但仅当值为 inputOutput 时才会扫描传出要素中是否存在脚本。 这将覆盖整个系统的 featureServiceXSSFilter 属性。
  • xssInputRule 将指定检测到代码时的响应。 选项为 rejectInvalidsanitizeInvalidrejectInvalid 值是默认行为,建议使用。

限制文件权限

设置文件权限,以便仅授予对 ArcGIS Server 安装目录、配置存储和服务器目录的必需访问权限。 访问 ArcGIS Server 软件需要具备的唯一帐户是 ArcGIS Server 帐户。 此帐户用于运行软件。 您的组织可能需要为更多帐户授予访问权限。 请记住,ArcGIS Server 帐户必须具有对安装目录、配置存储和服务器目录的完全访问权限,站点才能正常工作。

安装 ArcGIS Server 时的文件权限仅允许运行 ArcGIS Server 的帐户访问这些文件。 ArcGIS Server 创建的配置存储和服务器目录等文件已经锁定,因此,只有运行 ArcGIS Server 的帐户才可访问这些文件。

对配置存储具有写入权限的任何帐户都可更改 ArcGIS Server 设置,而这些设置通常只可由系统管理员进行修改。 如果使用内置安全存储来维护用户,则配置存储包含这些用户的加密密码。 在此情况下,还应限制对配置存储的读取权限。

如果使用受保护的地图或地理处理服务,请锁定服务器目录的文件权限,以确保未授权帐户无法获取对这些地图和地理处理作业输出的访问权限。

禁用主站点管理员帐户

主站点管理员帐户是在 ArcGIS Server Manager 中创建站点时指定的帐户。 仅 ArcGIS Server 可识别其名称和密码;该帐户不是操作系统帐户,且与您的标识存储中的用户帐户分开管理。

禁用主站点管理员帐户以确保除了通过在标识存储中指定的组或角色之外,无法采用其他方式管理 ArcGIS Server。 有关完整说明,请参阅禁用主站点管理员帐户

定义用于生成 ArcGIS 令牌的共享密钥

ArcGIS 令牌是加密信息字符串。 共享密钥是用于生成此加密字符串的密钥。 共享密钥越复杂,恶意用户越难解密和破译共享密钥。 如果用户能够破译共享密钥,复制 ArcGIS Server 的加密算法,并获取授权用户的列表,该用户将能够生成令牌,并使用此特定 ArcGIS Server 中的任何受保护资源。

在定义共享密钥之前,请考虑以下事项:

  • 共享密钥的长度应为 16 个字符(超出 16 个字符的任何字符均不会采用)。 建议使用随机字符序列作为密钥。 任何字符都可以使用,包括非字母数字字符。
  • 不应将密钥设为字典中的单词或容易猜出的常用值。 由于无需记住密钥或在其他位置使用该密钥,因此设置密钥与设置密码不同,复杂的密钥值并不会对用户造成不便。
  • 可使用高级加密标准 (AES) 通过共享密钥对令牌加密,该标准也称作 Rijndael。 密钥中的 16 个字符表示用于加密的 128 位。 有关加密和 AES 的详细信息,请查阅安全性参考资料,或咨询组织内具有安全性和密码学专业知识的人员。
  • 在高度安全的环境中,建议定期更改共享密钥。 切记,如果更改共享密钥,可能需要更新应用程序才能使用新的共享密钥。 一旦更改共享密钥,现有的全部嵌入式令牌都将变得无效。

有关详细信息,请参阅关于 ArcGIS 令牌

通过禁用 ArcMap Runtime 支持功能从您的系统中移除 Python 2.x

Python Software Foundation 已终止了对 Python 2 编程语言的支持。 这会对 ArcGIS Server 造成影响,原因是基于 ArcMap 的服务将在软件安装程序中使用 Python 2.x 的安装。 如果您的组织对于在您的系统上安装 Python 2.x 感到担忧,现在可以选择将其从 ArcGIS Server 部署中移除。

在 10.9.1 版本中,可以通过以下方式禁用 ArcMap Runtime 支持功能:

如果您选择禁用 ArcMap Runtime 支持功能,则 ArcMap 服务运行时将不会包含在 ArcGIS Server 中,且系统将不会安装 Python 2.x。 您将需要迁移或重新发布任何基于 ArcMap 的服务才能使用采用 Python 3.x 的 ArcGIS Pro 服务运行时。 您还必须重新创建一切基于 ArcObjects SDK 的服务器对象扩展 (SOE) 和服务器对象拦截器 (SOI),以便在迁移或重新发布相关服务后使用 ArcGIS Enterprise SDK。 为了使用 Python 3.x 语法,您的 Python 2.x 脚本和工具也将需要更新。

注:

如果您发布了基于 ArcMap 的要素服务并且数据已复制到托管数据库,则在禁用 ArcMap Runtime 支持功能情况下,删除服务不会从托管数据库中删除复制的数据。

ArcGIS Enterprise 10.9.1 将是支持基于 ArcMap 的服务的最后一个版本。 在此版本之后,将不再可能从 ArcMap(包括基于 ArcPyArcMap)在 ArcGIS Server 站点中发布或使用服务。 使用 ArcMap 服务运行时的服务将无法再运行(如果在升级到 ArcGIS Server 更高版本时存在)。 因此,Esri 建议您尽快迁移到基于 ArcGIS Pro 的服务和 Python 3.x。

您可以选择在当前运行的 10.9.1 之前的版本上迁移到基于 ArcGIS Pro 的服务和 Python 3.x,升级到 10.9.1 且不安装 ArcMap Runtime,然后验证迁移是否成功。 您还可以选择在 10.9.1 版本中安装 ArcMap Runtime 支持功能,然后在迁移基于 ArcGIS Pro 的服务和自定义解决方案后移除该功能。 如果您在迁移过程中确定需要 ArcMap Runtime 支持功能,则您可以在 10.9.1 部署中重新启用此功能

安全传输 ArcGIS 令牌

为了防止拦截和错误使用令牌,请使用采用 HTTPS 的安全连接。 使用 HTTPS 可确保恶意用户无法拦截客户端发送的用户名和密码以及 ArcGIS Server 返回的令牌。 有关详细信息,请参阅确保 ArcGIS Server 通信的安全性

在构建使用 GET 请求访问 Web 服务(这些服务受基于 ArcGIS 令牌的身份验证保护)的自定义 ArcGIS 客户端应用程序时,请使用 X-Esri-Authorization 令牌头而非查询参数来发送令牌。 这可以防止网络中介(如代理、网关或负载均衡器)获取令牌。 以下是 HTTP GET 请求以 X-Esri-Authorization 令牌头发送令牌的示例:

GET https://arcgis.mydomain.com/arcgis/rest/services/SampleWorldCities/MapServer?f=pjson HTTP/1.1
    Host: arcgis.mydomain.com
    X-Esri-Authorization: Bearer xMTuPSYpAbj85TVfbZcVU7td8bMBlDKuSVkM3FAx7zO1MYD0zDam1VR3Cm-ZbFo-

如果 ArcGIS Server 使用 ArcGIS Server 身份验证而非 Web 层身份验证(IWA、HTTP BASIC、PKI 等),,则可以使用标准 HTTP 授权令牌头代替 X-Esri-Authorization 令牌头:

GET https://arcgis.mydomain.com/arcgis/rest/services/SampleWorldCities/MapServer?f=pjson HTTP/1.1
    Host: arcgis.mydomain.com
    Authorization: Bearer xMTuPSYpAbj85TVfbZcVU7td8bMBlDKuSVkM3FAx7zO1MYD0zDam1VR3Cm-ZbFo-

使用标准化查询

ArcGIS Server 中含有一个安全选项(即标准化查询),能够提供更好的保护以防止 SQL 注入攻击。 默认情况下,会启用该选项。

如果您是服务器管理员,建议将这个安全选项保留为启用状态,然后指导应用程序开发人员构建使用独立于数据库的语法的 WHERE 子语句。 禁用这一选项后,系统可能会更加容易遭受 SQL 注入攻击。

有关详细信息,请参阅关于标准化查询

禁用服务目录

可通过禁用服务目录来减少从 Web 搜索中找到、浏览或者通过 HTML 表单查询到您的服务的可能性。 禁用服务目录还可以加强对 XSS 攻击的防护。

是否禁用服务目录取决于站点的用途以及用户和开发人员依靠它来进行导航的程度。 禁用服务目录后,您可能需要准备可用于站点的服务的其他列表或元数据。

有关禁用服务目录的说明,请参阅禁用服务目录

限制跨域请求

跨域请求用于许多系统攻击中。 建议将 ArcGIS Server 服务限制为仅用于您所信任的域中托管的应用程序。 有关详细信息,请参阅限制对 ArcGIS Server 的跨域请求