历史版本13 :安全防护 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 版本

报表服务器版本 JAR新增功能
10.02020-04-26增加 HSTS 设置按钮

1.2 功能简介

出于平台安全性考量,管理系统的「安全防护」包含五个安全功能开关:Cookie 增强HSTS 设置文件上传校验脚本调用公式限制Security Headers。如下图所示:

2.png

2. Cookie 增强编辑

注:要求服务器开启 https ,否则不发送 Cookie 。

Cookie 增强按钮默认关闭,点击开启时对当前协议进行检测。检测结果为https时正常开启,检测结果为http时弹窗提示:检测到当前协议为 HTTP,未能成功启用。请确认服务器开启 HTTPS 后重试,并开启失败。

如下图所示:

3.png

Cookie 增强按钮进行操作后信息保存在fine_conf_entity表的WebSecurityConfig.securityCookie字段中,fine_conf_entity表初始时无此字段。

3. HSTS 设置编辑

HSTS 设置按钮默认关闭,服务器开启https后方可开启该按钮,开启后将禁止http访问,IE11以下浏览器暂不支持此设置。若当前服务器协议为http,开启该按钮后,提示:检测到当前服务器协议为HTTP,未能成功启用,请确认服务器开启HTTPS 后重试。如下图所示:

注:HSTS 设置暂不考虑自签名证书。

34.png

HSTS 设置按钮开启后增加一个「header」:Strict-Transport-Security:,默认值为max-age=31536000; includeSubdomains

用户可以在fine_conf_entity表中在表中增加字段WebSecurityConfig.hstsHeader,设置「header」的值。

注:修改 FineDB 数据库表字段值的方法请参考 报表内置 HSQL 数据库 FineDB

4. 文件上传校验编辑

4.1 说明

文件上传校验默认开启,开启后对填报及平台外观配置中上传文件的后缀和大小进行校验。

  • 通过校验文件二进制头,禁止上传后缀与实际不符合的文件(例如 a.txt 改为 a.jpg 后上传)

  • 平台外观设置中禁止上传超过 20M 的图片,防止程序挂死(填报上传文件大小通过控件的大小限制自行做出限制),上传超出限制大小的图片弹出提示框,提示信息:为使显示效果较佳,请选择尺寸不小于 1024*768,大小不超过20M的图片,支持 PNG、JPG 格式

4.2 安全策略

文件上传校验开启后,默认安全策略只允许文件上传控件,上传白名单中的文件类型包括: jpg , jpeg , gif , bmp , png , pdf , doc , docx , ppt , pptx , xls , xlsx , zip。

安全策略可以通过修改 FineDB 中表fine_conf_entityWebSecurityConfig.fileInspectorType字段更改。默认为 WebSecurityConfig.fileInspectorType=1

注:修改 FineDB 数据库表字段值的方法请参考 报表内置 HSQL 数据库 FineDB

WebSecurityConfig.fileInspectorType字段配置信息如下表所示:

KeyValueDescription
WebSecurityConfig.fileInspectorType0后缀不在白名单内放行,否则校验头匹配才放行
1后缀在白名单且头匹配的才放行
2后缀不在黑名单内放行

5. 脚本调用公式限制编辑

脚本调用公式限制按钮进行操作后信息保存在fine_conf_entity表的WebSecurityConfig.remoteEvaluateLimitEnabled字段中,fine_conf_entity表初始时无此字段。

5.1 说明

JS 中FR.remoteEvaluate 和FR.remoteEvaluateAsync这两个接口,可以用来调用 SQL 公式,其使用频率较高,但这个接口也存在巨大的安全风险。

这两个接口中执行的 SQL 在请求中是明文的,只要某张模板使用了这个方法,或者攻击者知道有这个接口,就可以通过前端执行 JS 来实现对数据库的增删查改等操作,其风险等级已经相当于远程执行了。所以 FineReport9.0 和 FineReport10.0 都新增了脚本调用公式限制这一功能。

当用户使用了 JS 中的 FR.remoteEvaluateFR.remoteEvaluateAsync这两个接口,并且接口的 formula 使用的是公式中的报表类函数,如果用户开启了脚本调用公式限制开关,则效果预览时弹出提示框信息此调用存在安全风险,如需使用请在安全管理中修改脚本调用公式限制

注:如果用户没有相应使用场景,建议不要随便关闭该功能,关闭会有上述漏洞的风险,如有无法替代的场景可以提需求。

5.2 位置

FineReport10.0:

以管理员身份进入数据决策系统,点击管理系统>安全管理,如下图所示:

32.png

FineReport9.0:

以管理员身份进入数据决策系统,点击管理系统>系统管理>常规,如下图所示:

7.png

5.3 示例

1)在FineReport 设计器中点击文件>新建普通报表,单元格 B4 输入Test,在右侧属性面板中点击超级链接,为单元格添加JavaScript 脚本,如下图所示:

30.png

2)点击分页预览,点击Test,弹出提示框信息,如下图所示:

31.png

6. Security Headers编辑

安全头系列设置,开启后将给请求头附加 HTTP Security Headers 属性,阻止漏洞攻击,Security Headers按钮进行操作后信息保存在fine_conf_entity表的WebSecurityConfig.httpHeadersEnabled字段中,fine_conf_entity表初始时无此字段。

点击高级设置展开高级防护子功能开关,共五个,如下图所示:

注:当 Security Headers 功能开启时默认子功能全部开启,Security Headers 关闭时默认全部关闭,同时不允许开启高级防护功能

33.png

Security Headers 具体介绍如下表所示:

设置项说明
CSP 内容安全策略

开启后,请求头部增加 Content-Security-Policy:object-src 'self' 设置。对按钮进行操作后信息保存在fine_conf_entity表的WebSecurityConfig.contentSecurityPolicyEnabled字段中,fine_conf_entity表初始时无此字段。

XSS 攻击防护

开启后,请求头部增加 X-XSS-Protection:1; mode=block 设置。对按钮进行操作后信息保存在fine_conf_entity表的WebSecurityConfig.xssProtectionEnabled字段中,fine_conf_entity表初始时无此字段。

点击劫持攻击防护

开启后,请求头部增加 X-Frame-Options:SAMEORIGIN 设置。对按钮进行操作后信息保存在fine_conf_entity表的WebSecurityConfig.frameOptionsEnabled字段中,fine_conf_entity表初始时无此字段。

内容嗅探攻击防护

开启后,请求头部增加 X-Content-Type-Options:nosniff 设置。对按钮进行操作后信息保存在fine_conf_entity表的WebSecurityConfig.contentSecurityPolicyEnabled字段中,fine_conf_entity表初始时无此字段。

浏览器缓存禁用

开启后,增加 Cache-Control:no-cache、Pragma:no-cache&Expires:0 设置。对按钮进行操作后信息保存在fine_conf_entity表的WebSecurityConfig.cacheControlEnabled字段中,fine_conf_entity表初始时无此字段。

注1:如果使用跨域 iframe 的方式嵌入报表,出现无法访问的情况,请关闭 Security Headers 高级设置中的「点击劫持攻击防护」按钮。

注2:单点登录时若报跨域的问题,请关闭 Security Headers 高级设置中的「内容嗅探攻击防护」按钮。

默认开启的具体设置如下所示:

res.addHeader("X-Content-Type-Options", "nosniff");
res.addHeader("X-XSS-Protection", "1; mode=block");
res.addHeader("X-Frame-Options", "SAMEORIGIN");
res.addHeader("Content-Security-Policy", "object-src 'self'");
res.addHeader("Cache-Control", "no-cache");
res.addHeader("Pragma", "no-cache");
res.addDateHeader("Expires", 0)