扫描 ArcGIS Server 以检查安全性最佳做法
ArcGIS Server 附带了一个 Python 脚本工具 serverScan.py,用于扫描一些常见的安全问题。 该工具根据为 ArcGIS Server 配置安全环境中的一些最佳做法来检查问题。 对多个条件或配置属性进行分析并将其划分为三个严重性级别:Critical、Important 和 Recommended。 这些标准的描述如下:
|
ID |
严重性 |
属性 |
描述 |
|---|---|---|---|
|
SS01 |
|
Web 通信 |
确定是否为 ArcGIS Server 启用了 HTTPS。 要防止任意通信被截取,建议您配置 ArcGIS Server 和 ArcGIS Web Adaptor(如已安装)来强制使用 SSL 加密。 |
|
SS02 |
|
标准化查询 |
确定是否强制执行标准化查询。 为了防范 SQL 注入攻击,必须启用此选项。 |
|
SS03 |
|
令牌请求 |
确定是否支持通过 GET 请求生成令牌。 通过 GET 请求生成令牌时,用户的凭据将作为 URL 的一部分发送,可能会通过浏览器历史记录或网络日志被捕获和泄露。 如果其他应用程序没有要求,应禁用此操作。 |
|
SS04 |
|
令牌请求 |
确定是否支持通过 POST 并且在查询参数中包含凭据的生成令牌请求。 生成令牌时,用户的凭据可作为 URL 的一部分提供,并通过浏览器历史记录或网络日志显示。 如果其他应用程序没有要求,应禁用此操作。 |
|
SS05 |
|
|
生成禁用 |
|
SS06 |
|
系统服务权限 |
确定是否在 Server Manager 的 System 文件夹中对任何服务应用了非默认权限。 为确保只有管理员和发布者能够访问 System 文件夹中的服务,不应分配任何角色。 |
|
SS07 |
|
REST 服务目录 |
确定是否可通过 web 浏览器访问 REST 服务目录。 除非用户正在使用该目录搜索和查找服务,否则应禁用该目录以减少在 Web 搜索中浏览、查找或者通过 HTML 表单查询到您的服务的可能性。 这样做还可以加强对跨站点脚本 (XSS) 攻击的防护。 |
|
SS08 |
|
跨域限制 |
确定跨域请求是否被限制在特定域。 为了减少未知应用程序向您的 Web 服务发送恶意命令的可能性,建议将服务的使用限制在仅托管在您信任的域中的应用程序上。 |
|
SS09 |
|
动态工作空间 |
生成可通过动态工作空间访问数据库的服务列表。 如果保护不当,这可能使数据库/工作空间暴露,从而遭到恶意第三方通过 REST 访问。 只有服务和动态图层/工作空间功能用于 Web 应用程序的主动使用时才应启用动态工作空间。 在这些情况下,重要的是确保由地图服务用于连接至工作空间/数据库的数据库连接具备应用程序所需的最低权限,例如,在所需工作空间范围内仅对其他表格的只读权限。 |
|
SS10 |
|
通过 HTTPS 的 Web Adaptor |
确定是否有一个或多个 Web Adaptor 是通过 HTTPS 注册的。 为了让 Server Manager 成功重定向到 HTTPS,所有 Web Adaptor 都应该通过 HTTPS 注册。 |
|
SS11 |
|
禁用 PSA 账户 |
确定主站点管理员账户是否已启用。 建议您禁用此账户,以确保除了身份存储中指定的组或角色外,没有其他方式可以管理 ArcGIS Server。 |
|
SS12 |
|
要素服务权限 |
返回已启用 |
|
SS13 |
|
LDAP 标识存储 |
如果 ArcGIS Server 配置了 LDAP 身份存储,则确定是否使用加密通信。 为了确保 ArcGIS Server 与 LDAP 身份提供者之间的通信加密,建议在为 LDAP 用户存储和 LDAP 角色存储配置(如果使用)定义的连接 URL 中使用 |
|
SS14 |
|
服务器 SSL 证书 |
确定 ArcGIS Server 是否使用自签名证书。 为了帮助减少与 ArcGIS Server 通信的客户端的 Web 浏览器警告或其他意外行为,建议导入并使用已绑定到端口 6443 的 CA 签名 SSL 证书。 |
|
SS15 |
|
系统服务共享 |
确定 System 文件夹中的任何服务是否已共享为门户项目。 为了确保正确的权限,这些服务不打算通过门户共享。 建议移除关联的门户项目以恢复默认的服务权限。 |
serverscan 脚本位于 <ArcGIS Server installation location>/tools/admin 目录中。 从命令行或 shell 运行脚本。 运行脚本时可以选择指定参数。
serverScan.py 脚本位于 <ArcGIS Server installation location>\tools\admin 目录中。 从命令行或 shell 运行脚本。 运行脚本时可以选择指定参数。
serverScan.py 参数
|
参数 |
描述 |
|---|---|
|
-n |
安装服务器的计算机的完全限定域名(例如:gisserver.example.com)。 默认为运行脚本的计算机的主机名。 |
|
-u |
管理员账户的用户名。 |
|
-p |
管理员账户的密码。 |
|
-o |
将用于保存安全扫描报告的目录。 默认目录与从中运行脚本的文件夹相同。 |
|
-t |
可以生成一个令牌并用其代替用户名和密码。 如果为联合服务器生成门户令牌,则应在“Webapp URL”字段中输入正在扫描的服务器的完全限定域名。 如果为非联合服务器生成令牌,则必须通过管理员目录 (arcgis/admin/generateToken) 生成令牌,且客户端必须为“Request IP”。 提供令牌时,它会覆盖提供的任何用户名或密码。 |
|
--ignoressl |
禁用 SSL 证书验证。 自 10.7.1 起,默认情况下,脚本将尝试验证所有 SSL 证书。 如果 Python 不信任证书的发行机构,则脚本将无法完成。 如果需要,可以指定此参数以忽略所有证书。 |
|
-h 或 -? |
输出一个列表,其中包含在运行脚本时可指定的参数。 |
示例:python serverScan.py -n gisserver.example.com -u admin -p my.password -o C:\Temp
如果在不指定任何参数的情况下运行 serverScan.py 脚本,则系统将提示您手动输入或选择默认值。 如果您想要使用令牌,则在运行脚本时必须将其作为参数提供。
扫描会生成 HTML 格式的报告,该报告将列出在指定的 ArcGIS Server 站点中发现的上述任何问题。
默认情况下,该报告将保存在从中运行脚本的同一个文件夹中并命名为 serverScanReport_[hostname]_[date].html。