为解决跨站点脚本漏洞问题,例如,URL 链接注入漏洞、URL 基于 DOM 的跨站点脚本漏洞、URL 宽字符跨站漏洞、URL 跨站漏洞等,可以通过修改 iServer 配置文件【SuperMap iServer 安装目录】\webapps\iserver\WEB-INF\web.xml 来启用防护跨站点脚本攻击(在 iPortal 中启用防护跨站点脚本攻击时,配置文件为【SuperMap iPortal 安装目录】\webapps\iportal\WEB-INF\web.xml)。

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

<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>xsrfDefendTime</param-name>
             <!-- 开启防护跨站请求伪造后,可以设置防护跨站请求时间间隔,单位毫秒 -->
             <param-value>1000</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>

注意:

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

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

其中,主要配置<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,为关闭状态。
  • 参数名称:xsrfDefendTime(防护跨站请求时间间隔),默认值为空,时间单位为 ms 。开启防护跨站请求伪造后,防护跨站请求时间间隔设置大于 0 时才会生效。在设置的时间间隔内对 iServer 或 iPortal 同一资源进行跨站请求将会被拒绝。
  • 参数名称:refererWhiteList(跨站请求白名单),默认值为空。开启防护跨站请求伪造后,跨站请求白名单才会生效。跨站请求白名单默认为空,此时所有跨域请求都会被拒绝。用户可以通过配置文件向跨站请求白名单中添加域名(多个域名间用";"隔开)。当浏览器向 iServer 或 iPortal 发送请求时,只有该请求的域名(请求中的referer字段)在白名单内,用户才可以访问 iServer 或 iPortal,域名不在白名单内的请求会被拒绝。
  • 参数名称:hostWhiteList(host请求头白名单),默认值为空。开启防护跨站请求伪造后,host请求头白名单才会生效。host请求头白名单为空,此时所有host头都会被拒绝。用户可以通过配置文件向host请求头白名单中添加主机地址(ip:port形式,多个IP端口间用";"隔开)。当浏览器向 iServer 或 iPortal 发送请求时,只有该请求的host请求头在白名单内,用户才可以访问 iServer 或 iPortal,host请求头不在白名单内的请求会被拒绝。