GIS 服务器安全性最佳做法

发送反馈


GIS 服务器的安全问题备受关注,本文总结了多个最佳方法,通过一些简单配置,以确保 GIS 服务器获得最高安全。

启用 HTTPS 加密通信,禁用 HTTP 协议

GIS 服务器启动后默认使用的是 HTTP 协议,在网络中流通的信息都为明文,非常容易泄密。为保证传输信息不被中间服务器或者其它探测软件捕获,您必须禁用 HTTP 协议,开启 HTTPS,对通信内容加密。

 如果未开启 HTTPS,则将遇到以下安全问题:

为了能够在 Web 服务器和客户端之间创建 HTTPS 连接,Web 服务器需要一个服务器证书。在实际的生产环境中,建议您请求 CA 签名的证书,并配置到服务器。

此外,建议您使用 TLS1.2 版本,更安全。

关于如何配置启用 HTTPS 加密通信,请参阅:HTTPS 加密通信

配置启用 PBKDF2 加密

PBKDF2 是一种使用伪随机函数导出密钥的加密算法,该算法将 salted hash 进行多次重复计算,可有效提升密码安全性。需要注意,在启用 PBKDF2 加密后,iServer 原有的账户密码、密钥均将失效,且 iServer 登录耗时将显著增加

在 iServer 中配置启用 PBKDF2 加密的步骤如下:

  1. 配置初始化环境

在解压 iServer 产品包后,从 【iServer安装路径】/webapps/iserver/WEB-INF/lib/iserver-all-<版本号>-<小版本号>.jar/resource/security 路径下复制 shiro.ini 文件到【iServer安装路径】/webapps/iserver/WEB-INF 目录下。

执行 【iServer安装路径】/bin 路径下的 passwordreset 文件,重置管理员账户。

  1. 切换到  PBKDF2 加密方式

在进行了第一步后,修改 shiro.ini 中 passwordService 的值为 com.supermap.services.security.PBKDF2PasswordService,如下:

passwordService = com.supermap.services.security.PBKDF2PasswordService

配置启用跨域访问白名单

GIS 服务器实现了 HTML5 跨源资源共享(CORS)策略。如果 GIS 服务器依赖于网络防火墙或其他基于 IP 的访问控制,则此策略可能存在安全风险。GIS 服务器启动后默认允许来自任意域的跨域请求访问成功,将会遇到以下安全问题:

建议您可以通过配置跨域访问的白名单,进行更精准的控制。

关于如何配置启动跨域访问白名单,请参阅:配置启动跨域访问白名单

配置启用防护跨站脚本攻击

跨站脚本攻击 XSS(Cross Site Scripting)是指攻击者会在 Web 页面里插入恶意 Script 代码,当用户浏览该 Web 页面时,嵌入其中的 Script 代码会被执行,从而达到恶意攻击用户的目的。

通常会遇到的跨站点脚本漏洞问题如下:

为解决以上跨站点脚本漏洞问题,您必须通过修改配置文件以启用防护跨站脚本攻击。

关于如何配置启用防护跨站脚本攻击,请参阅:配置启用防护跨站脚本攻击

开启许可驱动管理器的安全防护

安装许可驱动后,可访问{ip}:1947,进入许可驱动管理页面,默认该页面未对访问用户做权限设置,导致任意用户都可以访问。您必须对许可驱动管理页面设置密码。

如果未对许可驱动管理页面设置密码,则将遇到以下问题:

关于如何开启许可驱动管理器的安全防护,请参阅:开启许可驱动管理器的安全防护

关闭 Remember Me 功能防止重放攻击

GIS 服务器启动后,默认开启了 RememberMe 功能,cookie 中会携带 rememberMe=参数,存在会话未及时失效,导致重放攻击的安全问题。攻击者可以通过截取网络数据包来对系统进行越权访问。为解决此问题,建议您通过配置选择性的关闭 RememberMe 功能,以降低风险。

关于如何关闭 Remember Me 功能,请参阅:关闭 Remember Me 功能配置。

开启异地登录检测

异地登录是指同一用户在不同地点同时登录到系统中,即一个账户多地登录。

GIS 服务器启动后,默认未开启异地登录检测,使得一个账户可以同时在多台主机上登录,存在账号泄露风险,建议您开启异地登录检测,配置异地登录处理策略。

关于如何开启异地登录检测,请参阅:配置启用异地登录检测

修改用于生成令牌的共享密钥

   GIS 服务器生成的 Token 是通过共享密钥生成的加密信息字符串,共享密钥的作用就是对用户信息加密,用于生成 Token。共享密钥越复杂,恶意用户越难解密和破译共享密钥。如果用户能够破译共享密钥,复制 GIS 服务器的加密算法,并获取授权用户的列表,则该用户将能够生成令牌,并可使用此用户在 GIS 服务器中的任何受保护资源。

关于如何修改用于生成 GIS 服务器令牌的共享密钥,请参阅:配置 Token 的共享密钥

安全传输令牌

为了防止拦截和错误使用令牌,请通过 https/http 请求头而不是 url 传递 GIS 服务器令牌。即在 Headers 请求头中添加“token:ruOVcrgRTNIDgLnfHgq3z_9XXeaBpVZ6joY85yTyAABwS7a_dHOce6Ma4IC2gYbmqKdFl-qA8dCjHrcfFP_pyA..”

配置防护 SQL 注入

SQL注入常见于应用了 SQL 数据库后端的网站服务器,入侵者通过提交某些特殊 SQL 语句,最终可能获取、篡改、控制网站服务器端数据库中的内容。此类漏洞是入侵者最常用的入侵方式之一。iServer 启动后默认未开启 SQL 注入检测,这是不安全的,将会遇到以下安全问题:

您必须开启 SQL 注入检测,并设置 SQL 查询过滤的威胁字符串,这样,用户在进行 data 或 map 资源的 SQL 查询时,如果在 SQL 查询表达式中出现了设置的威胁字符串,系统会默认该条查询表达式非法并返回400参数异常,防止执行恶意的 SQL 命令,从而保护用户的数据安全。

关于如何开启配置 SQL 注入检测,请参阅:SQL 注入检测配置

使用开启安全认证的数据

GIS 数据获取和制作过程中往往耗费很大的人力、物力,其中三维数据尤为昂贵,甚至还有很多大比例尺数据可能涉及国家安全,因此保证 GIS 数据的安全十分重要。 iServer 支持在生成缓存数据时进行加密,并支持对客户端浏览三维服务时生成的三维缓存进行加密。

关于如何保护 GIS 数据安全请参阅:保护数据安全

此外,还建议您使用开启安全认证的数据库。

限制上传文件的工作路径与类型

iServer 启动后,上传文件远程浏览时,默认可以浏览其所在系统的所有目录,攻击者可能通过上传功能将有害文件上传至 web 权限范围内的任意目录。建议您严格限制用户可访问目录的权限,避免用户访问敏感信息目录。

为解决上述安全问题,建议您为iServer配置上传文件的绝对工作路径,如:D:\ftp,设置后,数据仅可上传至此指定工作目录,用户也仅可浏览此工作目录。

此外,还建议您依据文件格式过滤上传的 zip 文件内容,配置需要过滤掉的文件格式,限制非法文件的上传。iServer 涉及上传 zip 文件的资源包括:attachmentdataimport (tiles)dataimport (relationship)dataimport (binary)fileManager

关于如何限制上传文件的工作路径与类型,请参阅以下主题:

限制上传数据的类型

iPortal 默认允许所有格式的数据上传,攻击者可能通过数据上传功能将有害文件上传至 iPortal 中。建议您依据文件名后缀过滤用户上传的数据,以限制非法文件的上传。

关于如何限制上传数据的类型,请参阅:上传数据后缀黑名单配置。

配置数据库

 iPortal 的门户数据(地图、服务、场景、数据、应用、洞察、大屏、Notebook、账户等基本信息)、安全信息(用户列表信息、角色信息等)、监控信息默认存储在 SQLite 数据库中,SQLite 作为轻型的嵌入式数据库,提供数据库级的锁定,无需安装和管理配置。但由于 SQLITE 将所有数据存储在同一个文件中,且无需用户名密码即可访问,因此非常容易造成数据泄密,一般仅用于测试与试用环境。在正式生产环境中部署 iPortal 时,为保障数据库安全,请选用支持安全认证的 MySQL/Oracle/PostgreSQL 等数据库进行管理,此时需要进行数据库的配置。

有关如何配置数据库,请参阅:数据库配置。

配置 GIS 服务数据动态加密

地理信息作为国家重要的基础性、战略性资源,GIS 数据安全与国家安全息息相关。iServer 提供了 GIS 服务数据动态加密能力,防止数据爬取,提升服务器的安全性。

以加密矢量瓦片数据为例,步骤如下:

1. 配置安全密钥,您可以通过配置文件方式或者 REST API 方式来操作。REST API 使用 workKeys 资源 PUT 请求来添加密钥,示例 URI 为 http://support.supermap.com.cn:8090/iserver/manager/security/workKeys.rjson?token=您的token ,请求体内容为

{"workKeySettings": [{

"keyLength": 256,

"keyID": "keyIDNAME",

"attributes": "abcd",

"version": "1.1",

"algorithm": "AES"

},{

"keyLength": 256,

"keyID": "keyIDNAME2",

"attributes": "abcd",

"version": "1.1",

"algorithm": "AES"

}]}

2. 添加密钥与服务之间的映射关系,您可以通过配置文件方式或者 REST API 方式来操作。REST API 使用 svcworkkeymappings 资源 PUT 请求来添加映射,其中一个密钥只能与一个服务组件绑定映射关系,示例 URI 为 http://support.supermap.com.cn:8090/iserver/manager/svcworkkeymappings.rjson?token=您的token ,请求体内容为

{"svcworkkeymappings": [

{

"urls": [

"/iserver/services/.*?/rest/maps/.*?/tileFeature\\.mvt.*",

"/iserver/services/.*?/restjsr/v1/vectortile/maps/.*?/tiles/.*?/.*?/.*?\\.mvt"

],

"typeName": "com.supermap.services.components.impl.MapImpl",

"keyID": "keyIDNAME"

},

{

"urls": [

"/iserver/services/.*?/rest/data/datasources/.*?/datasets/.*?/tilefeature\\.mvt.*"],

"typeName": "com.supermap.services.components.impl.DataImpl",

"keyID": "keyIDNAME2"

}

]}

注:GIS 服务数据加密后,需要配套使用专门的客户端解密才能加载显示。