为解决服务器端请求伪造(SSRF)漏洞问题,可以通过修改 iServer 配置文件【SuperMap iServer 安装目录】\webapps\iserver\WEB-INF\web.xml 来启用防护服务器端请求伪造攻击。

配置开启防护跨站点脚本攻击如下所示:

<filter> 
      <filter-name>SsrfFilter</filter-name>
      <display-name>SsrfFilter</display-name>
      <filter-class>com.supermap.server.host.webapp.SsrfFilter</filter-class>
      <async-supported>true</async-supported>
      <init-param>
            <param-name>ssrfDefendEnable</param-name>
            <!-- 可选值:true、false分别表示开启和关闭SSRF防护 -->
            <param-value>true</param-value>
      </init-param>
      <init-param>
            <param-name>apiList</param-name>
            <!-- 开启防护后可以设置防护的API范围,支持正则表达式匹配URL,多个规则使用;分割,可参考以下示例 -->
            <param-value>^/iserver/setup/.*;^/iserver/_setup/.*;^/iserver/setup.*</param-value>
      </init-param>
      <init-param>
             <param-name>hostWhiteList</param-name>
             <!-- 开启防护后,可以设置host请求头白名单,只有在白名单内的主机ip才能访问apiList中匹配的API,多个ip使用;分割 -->
             <param-value>ip1:port1;ip2:port2;ip3:port3</param-value>
      </init-param>
</filter>
<filter-mapping>
      <filter-name>SsrfFilter</filter-name>
      <url-pattern>/*</url-pattern>
</filter-mapping>

1、要使 SsrfFilter 真正起到防护作用,需要在 web.xml 中定义该 filter 和 filter-mappping ;并且<filter-mapping>...</filter-mapping>有严格的执行顺序, XssFilter 对应的 filter-mapping 节点需要放在 iserver-services 之前,tunnelFilter 节点之后。

2、在 web.xml 配置完成后,重启 iServer 方可生效。