为解决服务器端请求伪造(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 方可生效。