页面树结构
转至元数据结尾
转至元数据起始

1.需求背景

 系统安全保障非常重要,我们对用户自行安全测试过程中发现的问题进行了总结,主要有以下几类:

(1) Smartbi作为通用的产品,以及考虑常用的应用场景,个别安全问题无法在产品中直接做修改;

(2)因为测试标准不同,内部测试没有发现的问题,或者是产品修改添加一些增强的功能点,没有及时发现问题;

(3)由于集成或者使用第三方应用服务器导致的问题,比如:Tomcat的一些配置会导致启用了不安全的 HTTP 方法;

(4)定制开发扩展功能点导致的安全问题。

针对以上问题,Smartbi提供扩展包WebSecurityExt,主要是解决由appscan扫描出的漏洞,并且可设置自行添加请求头和请求头值。

2.功能说明

WebSecurityExt扩展包主要通过以下方式起作用:

(1)当前扩展包可以根据properties提供的配置,自动给filter拦截到的请求添加请求头和对应的值。

(2)Properties中的key就是请求头的名称,value就是设置的请求头的值。

3.使用说明

使用前提:此扩展包需要匹配使用2021-01-28号之后的smartbi.war包,如果是这个日期之前的smartbi.war包,需要先更新到2021-01-28号之后的war包才能正常使用。

(1)扩展包下载:

V9及以上版本:WebSecurityExt.ext,扩展包部署参考:部署扩展包

V8版本:WebSecurityExt.ext ,扩展包部署参考:部署扩展包

(2)扩展包中Properties文件用于设置漏洞的请求头信息,需要在WebSecurityExt.properties中进行设置。

注意:修改扩展包文件可以用压缩工具打开,然后将文件直接拖拽到桌面进行修改,修改后再添加回扩展包;不要手动解压扩展包然后又压缩回去,这样容易造成扩展包文件路径不对,导致无法正常使用。

4.补充说明

4.1 常见安全问题

总结我们在安全测试中,有以下常见的安全问题,不同安全问题的解决办法不一,具体如下,供参考:

常见安全问题

解决办法

"Content-Security-Policy" 头缺失或不安全

通过在properties中设置key和value,扩展包的filter会根据key和value相对应的给拦截到的请求设置请求头key和请求头的值value。

"X-Content-Type-Options"头缺失或不安全

同上,也是通过properties配置对其进行设置值。

"X-XSS-Protection"头缺失或不安全

同上,通过properties配置的key和value进行设置值。

跨帧脚本编制防御缺失或不安全

主要也是设置请求头参数,设置X-Frame-Options 主要是对iframe进行设置的,要注意修改这个的值的时候,有可能会影响到移动端打开报表的功能(具体可配内容见4 properties值配置)

CSRF请求伪造

主要是判断referer是否是信任的安全网络,如果是信任的安全网络就可以放行,如果是不信任的站点,则重定向到错误页面,具体如何配置请看下面的safeReferer。

SSRF跨站服务端请求伪造


4.2 配置说明

通过设置Properties值,可以解决常见的几种Web安全问题,对Properties中值解释如下:

4.2.1 errorURL

(1)跳转到错误页面的地址,默认值为/smartbi/vision/errorCode500.jsp         

(2)如果没有修改过前缀的话,则不需要改动。如果修改了前缀,比如: ip:host/Huawei/vision/index.jsp,则需要errorURL的值改为: /Huawei/vision/errorCode500.jsp

4.2.2 safeReferer

(1)这个是设置允许通过的网络路径,比如http://localhost:8080是允许通过的网络,就可以设置为 http\://localhost:8080        

(2)若safeReferer不设置的话,本服务器是默认放行,然后把其他referer全都拦截。         

(3)如果设置多个允许通过的网络路径,就以英文逗号为分割如 http\://localhost:8080,http\://10.10.101.86:8080
         注意:多数的集成环境(单点登录,nginx)会出现配置扩展包以后无法正常访问系统的情况,主要就是因为safeReferer没有配置完整。
         此时,可以根据日志进行判断,看请求的referer是否都配置在safereferer中。
  

4.2.3 X-XSS-Protection

 (1)配置X-XSS-Protection请求头的值。        

 (2)X-XSS-Protection有几种配置:              

0:禁用XSS保护;             

1:启用XSS保护;启用XSS保护,并在检查到XSS攻击时,停止渲染页面

4.2.4 X-Frame-Options

(1)配置 X-Frame-Options 请求头的值。        

(2)可设置的值为:            

DENY:页面不能被嵌入到任何iframe或frame中;            

SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中;设置后,页面将不能被外部iframe嵌套,如果有集成相关的功能,可能会受到影响            

ALLOW-FROM:页面允许frame或frame加载。(当前允许本服务器的)

---注意:这是一个被弃用的指令,不再适用于现代浏览器,请不要使用它。在支持旧版浏览器时,页面可以在指定来源的 frame 中展示。请注意,在旧版 Firefox 上,它会遇到与 SAMEORIGIN 相同的问题——它不会检查 frame 所有的祖先页面来确定他们是否是同一来源。Content-Security-Policy HTTP 首部有一个 frame-ancestors 指令,可以使用这一指令来代替。                

 示例:
        i.-->允许单个其他服务器嵌套
               Content-Security-Policy='frame-ancestors https://www.xxx.com'
        ii.-->允许多个其他服务器嵌套,使用空格分隔
               Content-Security-Policy='frame-ancestors https://www.xxx.com https://www.yyy.com'

(3)若使用DENY以及SAMEORIGIN有可能会导致移动端的报表,以及第三方集成相关的资源无法加载。

4.2.5 X-Content-Type-Options

 (1)配置 X-Content-Type-Options 请求头的值。
           通常浏览器会根据响应头的Content-Type字段来分辨请求资源的类型。例如:"text/html"代表html文档,"image/png"是PNG图片,"text/css"是CSS样式文档。然而,有些资源的Content-Type是错的或者未定义。这时,某些浏览器会启用MIME-sniffing来猜测该资源的类型,解析内容并执行。      

(2)默认值为:nosniff (一般不需要修改)

4.2.6 Content-Security-Policy

(1)配置 Content-Security-Policy 请求头的值。       

(2)配置好并启用后,不符合 CSP 的外部资源就会被阻止加载。比如配置了 default-src 'self' ,有这个规则的话,就会对某些资源进行了阻碍,如果设置了这个值,然后打开smartbi发现有些功能不正常,可以打开f12(开发者工具),然后观察是否是系统禁用了。

  (3)请求头可以设置的值为下面的:

请求头

解释

script-src 'self'

外部脚本

style-src 'self'

script-src 版的样式表

img-src 'self'

用于定义可从中加载图像的来源

font-src 'self'

用于指定可提供网页字体的来源

media-src 'self'

用于限制允许传输视频和音频的来源

object-src 'self'

可对 Flash 和其他插件进行控制

plugin-types 'self'

用于限制页面可以调用的插件种类

child-src 'self'

用于列出适用于工作线程和嵌入的帧内容的网址(框架)

default-src 'self'

会对所有外部资源都限制,然后只能加载当前域名的资源

(4)现在的值是:form-action *,限制能被用来作为给定上下文的表单提交的目标 URL(限制 form 的 action 属性的链接地址)。
(5)如果要修改的form-action的话,要注意当前是否有form表单到其他地方,防止没设置导致form表单提交失败。
(6)如果使用default-src 'self' 这个值的话,有的时候会导致smartbi一些资源无法加载出来,比如在登陆页面的输入框就无法加载

4.2.7 strictLimit

(1)该配置项表示 是否要开启严格限制。

(2)默认值为false,表示不开启。如果修改为true,则表示当referer为空且使用post请求rmiservlet时做拦截。(这种情况通常发生在本地使用html表单请求当前服务器)

4.3 添加新的请求头

(1)除了errorURL和safeReferer是特殊的情况。其他的都是对应请求头的key和value值   

(2)比如想要添加请求头 ABC,值为11。只需要在properties文件中,添加ABC=11 就可以了。

4.4 .Web应用服务器配置

(1)启用了不安全的"OPTIONS"HTTP 方法

  • 无标签