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

目录:

1. 概述编辑

1.1 版本

FineBI服务器版本功能变更
6.0-

1.2 功能简介

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

2. Cookie增强编辑

「Cookie 增强」按钮默认关闭。点击开启时对当前协议进行检测:

  • 检测到当前服务器协议为 HTTPS 时,Cookie 增强可正常开启。

  • 检测到当前服务器协议为 HTTP 时,弹窗提示「检测到当前服务器协议为HTTP,未能成功启用。请确认服务器开启HTTPS后重试」,并开启失败。

如下图所示:

3. HSTS设置编辑

3.1 功能说明

HSTS是一种互联网安全机制,全称叫HTTP Strict Transport Security,即安全传输协议。 它告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP。

「HSTS 设置」按钮默认关闭。服务器开启 HTTPS 后方可开启该按钮,开启后将禁止 HTTP 访问,IE11 以下浏览器暂不支持此设置。

若当前服务器协议为 HTTP,开启该按钮后,提示:检测到当前服务器协议为HTTP,未能成功启用,请确认服务器开启HTTPS 后重试。如下图所示:

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

3.2 设置方法

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

超级管理员可通过「fine_conf_entity可视化配置插件」修改「header」的值。

注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。

配置项
配置值配置示例含义
WebSecurityConfig.hstsHeader

max-age=<expire-time>

max-age=31536000

设置在浏览器收到这个请求后的31536000秒的时间内凡是访问这个域名下的请求都使用HTTPS请求

max-age=<expire-time>; includeSubDomainsmax-age=31536000; includeSubdomains

设置在浏览器收到这个请求后的31536000秒的时间内凡是访问这个域名下的请求都使用HTTPS请求

此规则也适用于该网站的所有子域名

max-age=<expire-time>; preloadmax-age=31536000; preload

设置在浏览器收到这个请求后的31536000秒的时间内凡是访问这个域名下的请求都使用HTTPS请求

预加载HSTS

4. 文件上传校验编辑

4.1 功能说明

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

判断条件
具体设置
判断上传的文件大小

数据决策系统>外观配置中,禁止上传超过 20M 的图片,防止程序挂死。

上传超出限制大小的图片,会弹出提示框:为使显示效果较佳,请选择尺寸不小于 1024*768,大小不超过20M的图片,支持 PNG、JPG 格式。

文件控件可自行设置文件的大小限制,超过限制则无法上传。

上传超出限制的文件,会弹出提示框:文件过大,上限为 xxx KB

判断上传的文件类型

默认支持上传的文件类型包括:

jpg , jpeg , gif , bmp , png , pdf , doc , docx , ppt , pptx , xls , xlsx , zip

判断上传的文件二进制头

通过校验文件二进制头,禁止上传后缀与实际不符合的文件

例如 a.txt 改为 a.jpg 后上传

4.2 修改支持上传的文件类型

文件上传校验开启后:

允许上传白名单中的文件类型包括:jpg , jpeg , gif , bmp , png , pdf , doc , docx , ppt , pptx , xls , xlsx , zip

不允许上传黑名单中的文件类型包括:asp, jsp, php, exe

超级管理员可通过「fine_conf_entity可视化配置插件」修改文件上传校验类型。

注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。

配置项
规则
WebSecurityConfig.fileInspectorType0

后缀不在白名单内时,直接放行

后缀在白名单内时,需要校验头匹配才放行

1默认值,后缀在白名单且头匹配的才放行
2后缀不在黑名单内放行

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

5.1 功能说明

JS 中FR.remoteEvaluateFR.remoteEvaluateAsync这两个接口的频率较高,但这两个接口也存在巨大的安全风险,可能会导致攻击者实现对数据库的增删改查等操作,其风险等级相当于远程执行。所以 FineReport9.0 和 FineReport10.0 都新增了「脚本调用公式限制」这一功能。

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

注:如果用户没有相应使用场景,建议不要随便关闭该功能,关闭会有上述漏洞的风险。

5.2 设置方法

管理员登录数据决策系统,点击「管理系统>安全管理>安全防护」,即可开启「脚本调用公式限制」,如下图所示:

6. Security Headers编辑

安全头系列设置,开启后将给请求头附加 HTTP Security Headers 属性,阻止漏洞攻击。

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

注:当 Security Headers 功能开启时默认子功能全部开启,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)

6.1 CSP内容安全策略

1)功能简介

CSP内容安全策略,类似于白名单,通过在CSP中配置白名单,来告诉浏览器或者客户端,哪些东西是被授权执行的,哪些东西是被禁止的。

实现方式就是网站向浏览器发一个CSP头部,来实现告诉浏览器以上信息,这样就算攻击者发现了网站的漏洞,也没有办法写攻击脚本,因为攻击脚本不在白名单中。

HTTP 响应头Content-Security-Policy允许站点管理者控制用户代理能够为指定的页面加载哪些资源。除了少数例外情况,设置的政策主要涉及指定服务器的源和脚本结束点。这将帮助防止跨站脚本攻击。

2)设置方法

开启后,请求头部默认增加Content-Security-Policy:object-src 'self'设置。

超级管理员可通过「fine_conf_entity可视化配置插件」修改策略。

注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。

配置项
配置值配置示例语法含义
WebSecurityConfig.contentSecurityPolicyHeader

object-src

object-src 'self'Content-Security-Policy: <policy-directive>; <policy-directive>
注:多个用;分号隔开
1)none 表示不执行任何匹配。
2)self表示与当前来源(而不是其子域)匹配。
3)unsafe-inline表示允许使用内联 JavaScript 和 CSS。
4)unsafe-eval 表示允许使用类似 eval 的 text-to-JavaScript 机制

限制<object>、<embed>、<applet>标签的源地址

且仅允许与当前来源(而不是其子域)匹配

object-srcobject-src uri

限制<object>、<embed>、<applet>标签的源地址
且上述标签中地址仅https://example.com/允许加载

default-srcdefault-src https:

禁用不安全的内联/动态执行, 只允许通过 https加载这些资源 (images, fonts, scripts, etc.)

6.2 XSS攻击防护

1)功能简介

XSS是一类攻击程序的统称,是攻击者发现网站漏洞写的攻击程序的统称。这些程序通常是JS,也可以是Java,flash,html等。攻击成功可以实现:更高的权限,私密的会话,cookie等。

HTTP X-XSS-Protection 响应头是 Internet Explorer,Chrome 和 Safari 的一个特性,当检测到跨站脚本攻击 (XSS (en-US))时,浏览器将停止加载页面。

2)设置方法

开启后,请求头部默认增加X-XSS-Protection:1; mode=block设置。

超级管理员可通过「fine_conf_entity可视化配置插件」修改策略。

注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。

配置项
配置值语法含义
WebSecurityConfig.xssProtectionHeader0

X-XSS-Protection: 0

禁止XSS过滤

1

X-XSS-Protection: 1

启用XSS过滤
如果检测到跨站脚本攻击,浏览器将清除页面,删除不安全的部分
1; mode=block

X-XSS-Protection: 1; mode=block

启用XSS过滤
如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载

1; report=<reporting-uri>

示例:1; report=xss.php

X-XSS-Protection: 1; report=xss.php

启用XSS过滤

如果检测到跨站脚本攻击,浏览器将清除页面,并使用CSP xss.php的功能发送违规报告

6.3 点击劫持攻击防护

1)功能简介

点击劫持(ClickJacking)是一种视觉上的欺骗手段。

  • 攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。

  • 攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义。

The X-Frame-Options HTTP 响应头是用来给浏览器 指示允许一个页面 可否在 <frame>, <iframe>, <embed> 或者 <object> 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 clickjacking 攻击。

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

2)设置方法

开启后,请求头部默认增加X-Frame-Options:SAMEORIGIN设置。

超级管理员可通过「fine_conf_entity可视化配置插件」修改策略。

注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。

配置项
配置值语法含义
WebSecurityConfig.frameOptionsHeaderdeny

X-Frame-Options: deny

浏览器会拒绝当前页面加载任何frame页面

sameorigin

X-Frame-Options: sameorigin

表示该页面可以在相同域名页面的 frame 中展示

allow-from uri

示例:allow-from https://example.com/

X-Frame-Options: allow-from https://example.com/

表示该页面可以在指定来源(https://example.com/)的 frame 中展示

6.4 内容嗅探攻击防护

1)功能简介

MIME是一种标准,多用途互联网邮件扩展。它表明了文档、文件或各种字节的性质和格式。

X-Content-Type-Options HTTP 消息头相当于一个提示标志,被服务器用来提示客户端一定要遵循在 Content-Type 首部中对  MIME 类型 的设定,而不能对其进行修改。这就禁用了客户端的 MIME 类型嗅探行为。

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

2)设置方法

开启后,请求头部默认增加X-Content-Type-Options:nosniff设置。

超级管理员可通过「fine_conf_entity可视化配置插件」修改策略。

注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。

配置项
配置值语法含义
WebSecurityConfig.contentTypeOptionsHeadernosniffX-Content-Type-Options: nosniff下面两种情况的请求将被阻止:
1)请求类型是"style" 但是 MIME 类型不是 "text/css"
2)请求类型是"script" 但是 MIME 类型不是  JavaScript MIME 类型

6.5 浏览器缓存禁用

1)功能简介

浏览器缓存禁用包含三个ID

  • Cache-Control 通用消息头字段,被用于在http请求和响应中,通过指定指令来实现缓存机制。缓存指令是单向的,这意味着在请求中设置的指令,不一定被包含在响应中。

  • Expires 响应头包含日期/时间, 即在此时候之后,响应过期。无效的日期,比如 0, 代表着过去的日期,即该资源已经过期。如果在Cache-Control响应头设置了 "max-age" 或者 "s-max-age" 指令,那么 Expires 头会被忽略。

  • Pragma 是一个在 HTTP/1.0 中规定的通用首部,这个首部的效果依赖于不同的实现,所以在“请求-响应”链中可能会有不同的效果。它用来向后兼容只支持 HTTP/1.0 协议的缓存服务器,那时候 HTTP/1.1 协议中的 Cache-Control 还没有出来。

2)设置方法

开启后,请求头部默认增加Cache-Control:no-cache、Pragma:no-cache&Expires:0设置。

超级管理员可通过「fine_conf_entity可视化配置插件」修改策略。

注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。

配置项
配置值配置示例语法含义

WebSecurityConfig.cacheControlHeader

注:浏览器缓存禁用 Header Cache-Control 的值

no-cacheno-cache

Cache-control: no-cache

在发布缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证(协商缓存验证)
max-age=<seconds>max-age=3600

Cache-control: max-age=3600


设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒)

WebSecurityConfig.cacheControlExpiresHeader

注:浏览器缓存禁用 Header Expires 的值

00Expires: <http-date>代表着过去的日期,即该资源已经过期
<http-date>Wed, 21 Oct 2015 07:28:00 GMT在Wed, 21 Oct 2015 07:28:00 GMT日期后,响应过期

WebSecurityConfig.cacheControlPragmaHeader

注:浏览器缓存禁用 Header Pragma 的值

no-cacheno-cache

Pragma: no-cache

与 Cache-Control: no-cache 效果一致
强制要求缓存服务器在返回缓存的版本之前将请求提交到源头服务器进行验证

7. 请求响应优化编辑

「请求响应优化」按钮默认关闭。

请求响应优化按钮关闭时,显示详细堆栈信息。

请求响应优化按钮开启时,所有堆栈信息统一转为简单的错误信息提示:请求错误,如需查看详细错误信息请至安全管理页面进行设置。

8. Token认证增强编辑

「Token认证增强」按钮默认关闭。

Token对应的状态服务器中的登录信息会存储IP。开启「Token认证增强」按钮后,服务器增加IP校验:

  • IP相同则自动放行。

  • IP不同则识别为新的客户端,自动跳转到登录页,需要重新登录。