1.需求背景
系统安全保障非常重要,我们对用户自行安全测试过程中发现的问题进行了总结,主要有以下几类:
...
针对以上问题,Smartbi提供扩展包WebSecurityExt,主要是解决由appscan扫描出的漏洞,并且可设置自行添加请求头和请求头值。
2.功能说明
WebSecurityExt扩展包主要通过以下方式起作用:
...
(2)Properties中的key就是请求头的名称,value就是设置的请求头的值。
3.使用说明
使用前提:此扩展包需要匹配使用2021-01-28号之后的smartbi.war包,如果是这个日期之前的smartbi.war包,需要先更新到2021-01-28号之后的war包才能正常使用。
...
注意:修改扩展包文件可以用压缩工具打开,然后将文件直接拖拽到桌面进行修改,修改后再添加回扩展包;不要手动解压扩展包然后又压缩回去,这样容易造成扩展包文件路径不对,导致无法正常使用。
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
...
(3)如果设置多个允许通过的网络路径,就以英文逗号为分割如 http\://localhost:8080,http\://10.10.101.86:8080
注意:多数的集成环境(单点登录,nginx)会出现配置扩展包以后无法正常访问系统的情况,主要就是因为safeReferer没有配置完整。
此时,可以根据日志进行判断,看请求的referer是否都配置在safereferer中。
4.2.3 X-XSS-Protection
(1)配置X-XSS-Protection请求头的值。
...
1:启用XSS保护;启用XSS保护,并在检查到XSS攻击时,停止渲染页面
4.2.4 X-Frame-Options
(1)配置 X-Frame-Options 请求头的值。
...
---注意:这是一个被弃用的指令,不再适用于现代浏览器,请不要使用它。在支持旧版浏览器时,页面可以在指定来源的 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 请求头的值。
...
(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 方法