SuperMap iServer服务器安全性最优做法
- 前言
- 一、启用 HTTPS 加密通信,禁用 HTTP 协议,进行加密传输,保护敏感信息
- 二、配置启用跨域访问白名单
- 三、配置启用防护跨站脚本攻击
- 四、开启许可驱动管理器的安全防护
- 五、关闭 Remember Me 功能防止重放攻击
- 六、开启异地登录检测
- 七、修改用于生成令牌的共享密钥
- 八、安全传输令牌
- 九、配置防护 SQL 注入检测
- 十、使用开启安全认证的数据
- 十一、限制上传文件的工作路径与类型
- 总结
前言
GIS 服务器的安全问题一直备受关注,各种注入攻击、文件上传漏洞、XSS(跨站脚本攻击)等威胁,都在不断提醒我们需要通过安全措施来提高GIS服务器的安全等级。SuperMap iServer在产品中内置了一些安全防护手段,通过简单的配置,来确保 GIS 服务器获得更高的安全防护。接下来就一起来看看如何配置吧一、启用 HTTPS 加密通信,禁用 HTTP 协议,进行加密传输,保护敏感信息
1、安全问题场景
SuperMap iServer服务器启动后默认使用的是 HTTP 协议, HTTP 以明文的方式发送内容,不适合传输一些敏感信息,为保证传输信息不被中间服务器或者其他探测软件捕获,建议您启用 HTTPS 加密通信,规避潜在的信息泄密风险。
2、应对措施
禁用 HTTP 协议,开启 HTTPS,对通信内容加密。
3、配置方法
在实际生产环境中,需要先获取 CA签名的SSL证书。获取证书后,您可以通过 JSSE 或 APR 两种方式配置 HTTPS 加密。
4、配置前准备
生成 SSL 证书需要具备CSR(Certificate Signing Request)文件,该文件是您的证书请求文件,包含了您的服务器信息和单位信息,需提交给CA中心审核。CSR文件可以使用 Keytool 工具或 OpenSSL 工具手动生成。
1、使用Keytool工具生成CSR文件
a)打开命令行,输入以下命令,生成keystore证书文件:
keytool -genkey -alias [$Alias] -keyalg RSA -dname "[$dname]" -keystore [$Keytool_Path]
-
[$Alias]
:证书别名,可自定义。 -
keyalg
:密钥类型。 -
[$dname]
:用于设置生成的服务器端证书的基本信息,包含cn=[$cn],ou=[$ou],o=[$o],1=[$1],st=[$st],c=[$cn]
。其中cn为公用名,通常为 https 服务器对应的域名,ou为组织单位名称,o为组织名称,l为所在城市或区域名称,st为所在省/市/自治区名称,c为该单位的双字母国家/地区代码。 -
[$Keytool_Path]
:证书文件保存路径。
例如:
keytool -genkey -alias tomcat -keyalg RSA -dname "cn=supermap.iserver.org,ou=localhost,o=localhost,l=china,st=sichuan,c=cn" -keystore D:\key.keystore
b)输入以下命令,生成CSR文件:
keytool -certreq -sigalg SHA256withRSA -alias [$Alias] -keystore [$Keytool_Path] -file [$Keytool_CSR]
-
sigalg
:摘要算法。 -
[$Keytool_CSR]
:CSR文件存放路径。
例如:
keytool -certreq -sigalg SHA256withRSA -alias tomcat -keystore D:\key.keystore -file D:\key.csr
2、使用 OpenSSL 工具生成CSR文件
a)安全 OpenSSL 工具。在 OpenSSL 网站(http://www.openssl.org/)下载并安装 OpenSSL,在 Window 平台下可使用 OpenSSL for Windows。
b)进入 OpenSSL/bin ,打开命令行,执行如下命令,生成 CSR 文件:
openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout [$Key_File] -out [$OpenSSL_CSR]
-
new
:指定生成一个新的CSR文件。 -
nodes
:指定密钥文件不被加密。 -
sha256
:指定摘要算法。 -
newkey rsa:2048
:指定密钥类型和长度。 -
[$Key_File]
:密钥文件名称。 -
[$OpenSSL_CSR]
:加密后文件的存放路径。
例如:
openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout D:\key.key -out D:\key.csr
c)根据系统返回的提示,输入生成CSR文件所需的信息,获取 CSR 文件。
5、具体配置说明
5.1使用 JSSE 方式配置 HTTPS 加密
(1)获取 CA 签名的 SSL 证书。
生成CSR文件后,依据需求,提供CSR等相关信息,获取 CA 签名的SSL证书。将所得证书文件压缩包进行解压,获得对应证书文件(例如D:/certifle.pfx
)和密码文件(例如D:/certifle.txt
)。
(2)修改SuperMap iServer安装目录/conf/server.xml
配置文件,开启 SSL 。
a)注释掉如下配置,不使用 APR:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
b)找到 SSL HTTP/1.1 Connector
的配置,即:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
…
…
</SSLHostConfig>
</Connector>
去掉注释,修改成如下内容:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443"
maxThreads="200"
scheme="https"
secure="true"
SSLEnabled="true"
keystoreFile=" D:/certifle.pfx"
keystorePass="证书密码"
clientAuth="false"
sslProtocol="TLS"
sslEnabledProtocols="TLSv1.2" />
注意: 其中keystoreFile
请填写 certifle. pfx
文件的实际绝对路径,keystorePass
请填写certifle.key
文件内的密码(如:123456)
c)关闭http,即注释掉以下部分:
<Connector port="8090" protocol="HTTP/1.1"
relaxedQueryChars="[]|{}"
relaxedPathChars="[]|{}"
connectionTimeout="8000"
redirectPort="8453"
executor="tomcatThreadPool"
enableLookups="false"
URIEncoding="utf-8"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/javascript,application/xml,application/json,application/rjson"/>
(3)在配置好SSL之后,为避免出现“Cookie中缺少Secure属性”的安全漏洞,可以通过中间件添加Secure属性,以Tomcat为例,在 SuperMap iServer安装目录/conf/web.xml
下,找到如下配置:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
增加,修改为:
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
</session-config>
(4)重启 Tomcat,可通过 https://localhost:8443/iserver/manager 访问 Web 应用。
5.2 使用 APR 方式配置 HTTPS 加密
(1)获取 CA 签名的 SSL 证书。
生成CSR文件后,依据需求,提供CSR等相关信息,获取 CA 签名的SSL证书。将所得证书文件压缩包进行解压,获得对应证书文件(例如D:/certifle.pfx
)和密码文件(例如D:/certifle.key
)。
(2)修改SuperMap iServer安装目录/conf/ server.xml
配置文件,开启 SSL。
a)找到并注释掉以下内容,关闭 http :
<Connector port="8090" protocol=" HTTP/1.1"
relaxedQueryChars="[]|{}"
relaxedPathChars="[]|{}"
connectionTimeout="8000"
redirectPort="8453"
executor="tomcatThreadPool"
enableLookups="false"
URIEncoding="utf-8"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css,application/javascript,application/xml,application/json,application/rjson"
/>
b)在其后方添加如下代码:
<Connector port="8443" protocol=" Http11AprProtocol "
SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
URIEncoding="utf-8"
clientAuth="false"
SSLCertificateFile="D:\certifle.pfx"
SSLCertificateKeyFile="D:\certifle.key"
SSLPassword="证书密码"
sslProtocol="TLS"
sslEnabledProtocols="TLSv1.2"/>
(3)在配置好 SSL 之后,为避免出现Cookie中缺少Secure属性
的安全漏洞,可以通过中间件添加 Secure 属性,以 Tomcat 为例,在 SuperMap iServer安装目录/conf/web.xml
下,找到如下配置:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
增加,修改为:
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
</session-config>
(4)重启 Tomcat ,可通过 https://localhost:8443/iserver/manager 访问 Web 应用。
二、配置启用跨域访问白名单
1、安全问题场景
SuperMap iServer 服务器实现了 HTML5 跨源资源共享(CORS)策略。SuperMap iServer服务器启动后默认允许来自任意域的跨域请求访问成功,可能会遇到类似“跨域策略配置不当”等安全问题,建议您配置跨域访问白名单,进行更精准的控制,以规避潜在的安全风险。
2、应对措施
配置跨域访问的白名单,进行更精准的跨域策略控制
3、配置方法
SuperMap iServer 安装目录/webapps/iserver/WEB-INF
目录下的 web.xml
文件中,找到如下配置:
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
将 <param-value>* </param-value>
的 * 修改为对应的允许访问资源的来源列表,用逗号分隔。例如,修改为:
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>https://www.bing.com,https://www.baidu.com</param-value>
</init-param>
则表示只允许来自 https://www.bing.com 和 https://www.baidu.com 两个域的跨域请求访问成功,不允许其他来源访问 iServer 资源。修改该配置项需重启 iServer 才能生效。
三、配置启用防护跨站脚本攻击
1、安全问题场景
攻击者利用跨站脚本攻击 XSS(Cross Site Scripting) 在 Web 页面里插入恶意 Script 代码,当用户浏览该 Web 页面时,嵌入其中的 Script 代码会被执行,达到恶意攻击用户的目的。常见的跨站点脚本漏洞问题有:URL 链接注入漏洞、URL 基于 DOM 的跨站点脚本漏洞、URL 宽字符跨站漏洞和URL 跨站漏洞。
2、应对措施
修改SuperMap iServer 的初始化配置文件web.xml
,以启用防护跨站脚本攻击。
3、配置方法
SuperMap iServer 安装目录/webapps/iserver/WEB-INF
目录下 web.xml
文件中,配置XssFilter
的filter
和对应的filter-mapping
,以开启防护跨站点脚本攻击。具体配置如下:
<filter>
<filter-name>XssFilter</filter-name>
<display-name>XssFilter</display-name>
<filter-class>com.supermap.server.host.webapp.XssFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>processMode</param-name>
<!-- 可选值:CLEAN、THROWERROR分别表示清除危险字符,抛出异常 -->
<param-value>THROWERROR</param-value>
</init-param>
<init-param>
<param-name>antisamyName</param-name>
<!-- 可选值:antisamy-myspace.xml、antisamy-ebay.xml、antisamy-tinymce.xml、antisamy-slashdot.xml -->
<param-value>antisamy-ebay.xml</param-value>
</init-param>
<init-param>
<param-name>xsrfDefendEnable</param-name>
<!-- 可选值:true、false分别表示开启和关闭防护跨站请求伪造 -->
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>refererWhiteList</param-name>
<!-- 开启防护跨站请求伪造后,可以设置跨站请求白名单 -->
<param-value>域名1;域名2;域名3</param-value>
</init-param>
<init-param>
<param-name>hostWhiteList</param-name>
<!-- 开启防护跨站请求伪造后,可以设置host请求头白名单 -->
<param-value>ip1:port1;ip2:port2;ip3:port3</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>XssFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4、注意事项
(1)要使XssFilter真正起到防护作用,需要在web.xml中定义该filter
和filter-mappping
;并且<filter-mapping>..</filter-mapping>
有严格的执行顺序,XssFilter对应的filter-mapping
需要放在iserver-services之前。
(2)在web.xml配置完成后,重启iServer方可生效。
其中,主要配置<init-param>
初始化参数如下:
- processMode(处理方式),默认值:THROWERROR。可选值:CLEAN、THROWERROR
- CLEAN:将可能存在危险的字符清除掉
- THROWERROR:在响应中直接报错
- antisamyName(安全防护策略文件),默认值:antisamy-ebay.xml。可选值:
antisamy-myspace.xml、antisamy-ebay.xml、antisamy-tinymce.xml、antisamy-slashdot.xml。
- antisamy-myspace.xml:相对危险,适用于社交网站,允许用户输入作为整个页面
- antisamy-ebay.xml:相对安全,对内容进行过滤,适用于电子商务网站,允许用户输入HTML脚本作为页面的一部分
- antisamy-tinymce.xml:相对安全,只允许文本格式通过
- antisamy-slashdot.xml:适用于新闻网站的评论过滤
- xsrfDefendEnable(防护跨站请求伪造),默认值:false,为关闭状态。
- refererWhiteList(跨站请求白名单),默认为空。开启防护跨站请求伪造后,跨站请求白名单才会生效。跨站请求白名单默认为空,此时所有跨域请求都会被拒绝。用户可以通过配置文件向跨站请求白名单中添加域名(多个域名间用";"隔开)。当浏览器向iServer发送请求时,只有该请求的域名(请求中的referer字段)在白名单内,用户才可以访问iServer,域名不在白名单内的请求会被拒绝。
- hostWhiteList(host请求头白名单),默认为空。开启防护跨站请求伪造后,host请求头白名单才会生效。host请求头白名单为空,此时所有host头都会被拒绝。用户可以通过配置文件向host请求头白名单中添加主机地址(ip:port形式,多个IP端口间用";"隔开)。当浏览器向iServer发送请求时,只有该请求的host请求头在白名单内,用户才可以访问iServer,host请求头不在白名单内的请求会被拒绝。
四、开启许可驱动管理器的安全防护
1、安全问题场景
在安装SuperMap iServer许可驱动后,可访问 localhost:1947 进入许可驱动管理页面,该页面默认未对访问用户做权限设置,任意用户都可以访问,存在安全风险。
2、应对措施
对许可驱动管理页面设置密码。
3、配置方法
(1)访问 localhost:1947,点击左侧 Option 下的 Configuration,进入 Basic Settings 菜单栏。
(2)在 Password Protection 选择项选择 All ACC Page
(3)点击右侧的 Change Password 按钮设置密码。如您是首次设置密码,则 Current Admin Password 项不填,直接输入新密码即可。密码输入完成点击 Submit 提交。
(4)在弹出的登录窗中输入您设置的密码,用户名不填,点击“登录”。
(5)在 Basic Settings 菜单栏下再次点击 Submit,完成设置。
五、关闭 Remember Me 功能防止重放攻击
1、安全问题场景
GIS 服务器启动后,默认开启了 Remember Me 功能,cookie 中会携带 Remember Me =参数,可能使会话未及时失效,导致重放攻击(Replay Attacks)的安全问题。攻击者可以通过截取网络数据包来对系统进行越权访问。
2、应对措施
关闭 Remember Me 功能,以降低风险。
3、配置方法
SuperMap iServer 安装目录/webapps/iserver/WEB-INF
目录下 iserver-system.xml
文件,找到如下配置:
<accessControl>
<SecuritySetting>
<tokenKey>……….</tokenKey>
<jsonWebTokenSetting>
在<tokenKey>
下一行增加<disableRememberMe>true</disableRememberMe>
<accessControl>
<SecuritySetting>
<tokenKey>……….</tokenKey>
<disableRememberMe>true</disableRememberMe>
<jsonWebTokenSetting>
即可关闭 RememberMe 功能,默认为false(开启Remember Me)。此配置项需重启iServer生效。
六、开启异地登录检测
1、安全问题场景
GIS 服务器启动后,默认未开启异地登录检测,此时一个账户可以同时在多台主机上登录,存在账号泄露风险。
2、应对措施
开启异地登录检测,配置异地登录处理策略。
3、配置方法
SuperMap iServer 安装目录/webapps/iserver/WEB-INF
目录下 iserver-system.xml
文件,找到如下配置:
<!-- 开启异地登录检测,如开启,当iServer监控到一个用户,不同ip地址登录后,会在登录时提示用户异地登录。-->
<checkLoggedInAnotherPlace>false</checkLoggedInAnotherPlace>
<loggedInAnotherPlaceProcessingStrategy>Notifying</loggedInAnotherPlaceProcessingStrategy>
修改为:
<!-- 开启异地登录检测,如开启,当iServer监控到一个用户,不同ip地址登录后,会在登录时提示用户异地登录。-->
<checkLoggedInAnotherPlace>true</checkLoggedInAnotherPlace>
<loggedInAnotherPlaceProcessingStrategy>Notifying</loggedInAnotherPlaceProcessingStrategy>
即开启异地登录告警。配置后需重启iServer方可生效。
其中,<loggedInAnotherPlaceProcessingStrategy>
表示异地登录处理策略,设置<checkLoggedInAnotherPlace>
为true,此配置才生效。可选值包括:
-
Notifying,通知模式。代表同一账号可同时登录到多台主机中,且在登录时会通知当前检测到该账号的异地登录情况。如下图所示。
-
LatestLoggedInFirst,最新登录优先。代表同一账号同一时间只能登录到一台主机中,登录时也会通知当前检测到的异地登录情况,且上一次在其他主机登录的账号会被自动注销。
七、修改用于生成令牌的共享密钥
1、安全问题场景
SuperMap iServer支持按用户角色授权访问,并支持Token(令牌)机制供Web应用安全对接。Token是包含用户名、有效期和某些专有信息并通过共享密钥加密的信息字符串。 如果Token过于简单或易于破译,恶意用户可以复制 GIS 服务器的加密算法、获取授权用户的列表,并能够生成令牌,使用在 GIS 服务器中任何受保护的资源,存在安全风险。
2、应对措施
Token共享密钥应不少于16个字符,共享密钥越复杂,恶意用户越难解密和破译共享密钥。在安全性要求极高的环境中,应定期更改密钥。
3、配置方法
登录服务管理器http://localhost:8090/iserver/manager/security,访问“安全”>“安全配置”页面,可以查看当前 Token 的共享密钥或者修改 Token 共享密钥。页面中的“生成密钥”按钮可以协助您生成随机共享密钥,点击“修改密钥”可以让新创建的共享密钥生效。
八、安全传输令牌
1、安全问题场景
防止拦截和错误使用令牌,导致其他安全问题。
2、应对措施
通过 https/http
请求头传递 GIS 服务器令牌,不用 url 进行传递。
3、配置方法
在 Headers 请求头中添加 token,例如:
"token:ruOVcrgRTNIDgLnfHgq3z_9XXeaBpVZ6joY85yTyAABwS7a_dHOce6Ma4IC2gYbmqKdFl-qA8dCjHrcfFP_pyA.."
九、配置防护 SQL 注入检测
1、安全问题场景
SuperMap iServer 启动后默认未开启 SQL 注入检测,可能会遇到SQL 注入的安全问题,即入侵者通过提交某些特殊 SQL 语句,来获取、篡改、控制网站服务器端数据库中的内容。
2、应对措施
开启 SQL 注入检测,并设置 SQL 查询过滤的威胁字符串。
3、配置方法
SuperMap iServer 安装目录/webapps/iserver/WEB-INF
目录下 iserver-system.xml
文件,找到如下配置:
<queryFilter>
<enabled>true</enabled>
<filterString/>
</queryFilter>
配置<filterString>
,设置 SQL 查询过滤的字符串,支持任意字符串(数据操作语言(DML)、表达式、通配符、特殊字符等),以分号隔开。例如:
<queryFilter>
<enabled>true</enabled>
<filterString>delete;SMID=.</filterString>
</queryFilter>
即表示当用户进行 data 或 map 的 SQL 查询时,如果在 SQL 查询表达式中出现了“delete 或 SMID=任意值”的字符串,系统会提示该条查询表达式非法并返回400参数异常,防止执行恶意的 SQL 命令,保护用户数据安全。如果没有设置 SQL查询过滤的字符串,在 SQL 查询表达式中系统会默认屏蔽掉分号。该项配置保存即可生效,无需重启 iServer。
十、使用开启安全认证的数据
1、安全问题场景
GIS 数据是GIS系统的核心价值,包括GIS工作空间、基础GIS数据库、地图瓦片等的保密性和安全性需要得到保障。
2、应对措施
SuperMap支持对工作空间、生成缓存数据时进行加密,并支持对客户端浏览三维服务时生成的三维缓存进行加密。此外,建议使用开启安全认证的数据库。
3、配置方法
(1)保存工作空间时加密
SuperMap 的工作空间支持加密存储,在SuperMap iDesktop中,使用加密方式生成的工作空间,在重用时需要输入密码才可以加载或打开,保证数据的安全。
(2)生成缓存数据时加密
SuperMap 的地图缓存和场景缓存均支持加密存储,其中地图缓存需要以紧凑格式存储才可以进行加密。在SuperMap iDesktop中,使用加密方式生成的缓存数据,在重用时需要输入密码才可以加载或打开,从而保证数据的安全。
(3)三维客户端缓存加密
SuperMap iServer 启动服务后会自动生成一个随机的加密密码,SuperMap iClient 客户端浏览三维服务时会缓存三维数据并使用服务端生成的密码自动对下载的三维数据进行加密。
服务器端管理员可以修改这个默认的加密密码,并可设置三维缓存数据是否允许拷贝。具体操作:
-
登录服务管理界面,访问“安全”>“三维数据安全”页面
-
点击“允许/禁止”按钮,可以设置缓存数据是否可拷贝
-
勾选显示字符,可以查看当前使用的密码
-
点击“修改密码”,可设置您的新密码,请注意密码强度,新密码要满足以下条件:
- 必须由字母、数字、特殊字符组成,区分大小写
- 长度不小于6个字符
- 不能包含空格
十一、限制上传文件的工作路径与类型
1、安全问题场景
SuperMap iServer 启动后,上传文件远程浏览时,默认可以浏览其所在系统的所有目录,攻击者可能通过上传功能将有害文件上传至 web 权限范围内的任意目录。
2、应对措施
严格限制用户可访问目录的权限,避免用户访问敏感信息目录。
3、配置方法
在SuperMap iServer 安装目录/webapps/iserver/WEB-INF
目录 iserver-system.xml
文件中,找到
<deniedFiles/>
<outputPath>./output</outputPath>
(1)添加<fileManagerWorkDir>
配置,设置 iServer 所在机器的工作目录的绝对路径。例如:
<fileManagerWorkDir>D:\ftp<fileManagerWorkDir>
<deniedFiles/>
<outputPath>./output</outputPath>
配置<fileManagerWorkDir>D:\ftp<fileManagerWorkDir>
,即 iServer 用户仅可浏览并上传数据至指定工作目录D:\ftp。此配置需重启 iServer 生效。默认用户可浏览并上传至iServer所在机器的任意目录。
(2)找到配置项,修改配置以禁止上传的文件类型。例如:
<deniedFiles>.exe,.bat,.html,.js,.war,.class,.jar,.shtml,.htm </deniedFiles>
<outputPath>./output</outputPath>
此参数配置需重启 iServer 生效。默认禁止的zip 文件的内部数据格式类型为:.jsp,.sh,.exe,.bat,.html,.js,.war,.class,.jar,.shtml,.htm,.php,.aspx,.asp,.asa,.jspx,.cgi
。
总结
安全是一个持续的过程,需要倾注长期的关注。只有加强日常管理及核心维护,做好技术维护和环境管理,才能不断提升GIS服务器的安全性,保障其稳定高效地运行。
更全面、详实的GIS服务器安全最佳做法可根据SuperMap iServer在线帮助文档:http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iServer/index.htm 的“云端一体化- GIS系统与安全- SuperMap GIS系统安全机制- GIS服务器安全最佳做法”进行部署配置。