1. 概述
1.1 版本
报表服务器版本 | 功能变动 |
---|---|
11.0 | - |
11.0.12 | 新增 Referer 校验功能,开启后,将根据白名单内容实现访客控制 |
11.0.14 | 开启请求响应优化后,报错提示内容变更 |
11.0.18 | 优化 Referer 校验配置项,支持设置当 Referer 字段为空或无 Referer 字段时,不允许用户访问资源 |
11.0.19 | 新增 URL 配置项,用于设置是否允许在 URL 中使用分号 |
1.2 功能简介
出于安全性的考量,平台在「安全防护」界面内提供了一些安全功能开关,包括:Cookie 增强、HSTS 设置、文件上传校验、脚本调用公式限制、Security Headers、请求响应优化、Token认证增强。
本文对以上安全功能进行了说明,用户可根据需求在「安全防护」界面内一键开启防护措施。如下图所示:
2. Cookie增强
「Cookie 增强」按钮默认关闭。点击开启时对当前协议进行检测:
检测到当前服务器协议为 HTTPS 时,Cookie 增强可正常开启。
检测到当前服务器协议为 HTTP 时,弹窗提示:检测到当前服务器协议为 HTTP,未能成功启用。请确认服务器开启 HTTPS 后重试,并开启失败。
如下图所示:
3. HSTS设置
3.1 功能说明
HSTS 是一种互联网安全机制,全称叫 HTTP Strict Transport Security,即安全传输协议。采用 HSTS 后,浏览器会自动采用 HTTPS 访问网站地址,从而保证用户始终访问到网站的加密链接,保护数据传输安全。
「HSTS 设置」按钮默认关闭。服务器开启 HTTPS 后方可开启该按钮,开启后将禁止 HTTP 访问。
若当前服务器协议为 HTTP,开启该按钮后,提示:检测到当前服务器协议为 HTTP,未能成功启用,请确认服务器开启 HTTPS 后重试。如下图所示:
注:IE11 以下浏览器不支持 HSTS 设置、自签名证书不支持 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>; includeSubDomains | max-age=31536000; includeSubdomains | 设置在浏览器收到这个请求后的31536000秒的时间内凡是访问这个域名下的请求都使用HTTPS请求 此规则也适用于该网站的所有子域名 | |
max-age=<expire-time>; preload | max-age=31536000; preload | 设置在浏览器收到这个请求后的31536000秒的时间内凡是访问这个域名下的请求都使用HTTPS请求 预加载HSTS |
4. 文件上传校验
4.1 功能说明
文件上传漏洞是指攻击者上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是 Web 服务器允许用户上传图片或者普通文本文件,而攻击者绕过上传机制上传恶意代码并执行从而控制服务器。
「文件上传校验」按钮默认开启,开启后对填报、平台外观配置及本地上传文件的后缀、大小和二进制头进行校验。校验通过则上传文件成功,校验未通过则上传文件失败。具体校验设置如下:
注:若用户上传的文件因未通过校验而导致上传失败,可以参考以下方案成功上传文件:
方案一:临时关闭「文件上传校验」按钮,重新上传文件。
方案二:参考 4.2 节修改文件类型的校验规则,放行需要上传的文件类型。
校验内容 | 具体设置 |
---|---|
上传文件的大小 | 数据决策系统>外观配置中,禁止上传超过 20M 的图片,防止程序挂死。 上传超出限制大小的图片,会弹出提示框:「为使显示效果较佳,请选择尺寸不小于 1024*768,大小不超过20M的图片,支持 PNG、JPG 格式。」 |
文件控件可自行设置文件的大小限制,超过限制则无法上传。 上传超出限制的文件,会弹出提示框:「文件过大,上限为 xxx KB」 | |
上传文件的类型 | 白名单(允许上传中的文件类型)包括: jpg , jpeg , gif , bmp , png , pdf , doc , docx , ppt , pptx , xls , xlsx , zip 黑名单(不允许上传中的文件类型)包括: asp, jsp, php, exe |
上传文件的二进制头 | 通过校验文件二进制头判断文件类型,禁止上传后缀与实际类型不符合的文件。 |
4.2 设置方法
管理员登录数据决策系统,点击「管理系统>安全管理>安全防护」,即可开启「文件上传校验」,如下图所示:
超级管理员可通过「fine_conf_entity可视化配置插件」修改文件上传校验类型。
注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。
配置项 | 值 | 规则 |
---|---|---|
WebSecurityConfig.fileInspectorType | 0 | 后缀不在白名单内时,直接放行 后缀在白名单内时,需要校验头匹配才放行 |
1 | 默认值,后缀在白名单且头匹配的才放行 | |
2 | 后缀不在黑名单内放行 |
4.3 效果示例
示例使用模板请参见:%FR_HOME%\webroot\WEB-INF\reportlets\demo\NewbieGuide\自由填报报表.cpt
在 FineReport 设计器中打开报表,点击文件控件所在单元格。
在右侧属性面板中修改文件控件的文件类型为 pdf,大小限制为 10 KB,如下图所示:
4.3.1 上传文件大小校验
点击「填报预览」,上传超过 10KB 的文件,弹出提示框「文件过大,上限为10KB」,文件上传失败。如下图所示:
4.3.2 上传文件类型校验
点击「填报预览」,上传非 pdf 类型的文件,弹出提示框「XXX类型禁止上传,允许上传的文件类型包括 pdf」,文件上传失败。如下图所示:
4.3.3 上传文件的二进制头校验
非 pdf 类型的文件,将其后缀名改为 .pdf 后上传。
系统通过校验二进制头判断其实际类型为非 pdf,不符合 .pdf 后缀,弹出提示框「.pdf 类型禁止上传,允许上传的文件类型包括 pdf」,文件上传失败。如下图所示:
5. 脚本调用公式限制
5.1 功能说明
JS 中使用到FR.remoteEvaluate和FR.remoteEvaluateAsync这两个接口的频率较高,但这两个接口也存在巨大的安全风险,可能会导致攻击者实现对数据库的增删改查等操作,其风险等级相当于远程执行。
所以 FineReport 新增了「脚本调用公式限制」这一功能,开启后将限制脚本中有风险的公式调用。
注:如果用户没有相应使用场景,建议不要随便关闭该功能,关闭会有上述漏洞的风险。
5.2 设置方法
管理员登录数据决策系统,点击「管理系统>安全管理>安全防护」,即可开启「脚本调用公式限制」,如下图所示:
5.3 效果示例
用户在开启「脚本调用公式限制」功能后,如果使用了FR.remoteEvaluate和FR.remoteEvaluateAsync这两个接口,在效果预览时会弹出提示框信息:此调用存在安全风险,如需使用请在安全管理中修改脚本调用公式限制。
1)在FineReport 设计器中点击「文件>新建普通报表」,单元格 B4 输入「Test」。
在右侧属性面板中点击「超级链接」,为单元格添加JavaScript 脚本,如下图所示:
2)点击「分页预览」,点击「Test」,弹出提示框信息,如下图所示:
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内容安全策略
6.1.1 功能说明
CSP 内容安全策略,类似于白名单,通过在 CSP 中配置白名单,来告诉浏览器或者客户端,哪些东西是被授权执行的,哪些东西是被禁止的。
网站会向浏览器发一个 CSP 头部,来告诉浏览器以上信息,这样就算攻击者发现了网站的漏洞,也没有办法写攻击脚本,因为攻击脚本不在白名单中。
开启「CSP内容安全策略」功能后,请求头部默认增加Content-Security-Policy:object-src 'self'设置,限制所有的外部资源,都只能从当前域名加载。
6.1.2 设置方法
管理员登录数据决策系统,点击「管理系统>安全管理>安全防护」,开启「Security Headers 」功能。点击「高级设置」,即可开启「CSP 内容安全策略」。如下图所示:
超级管理员可通过「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-src | object-src https://example.com/ | 限制<object>、<embed>、<applet>标签的源地址 | ||
default-src | default-src https: | 禁用不安全的内联/动态执行, 只允许通过 https加载这些资源 (images, fonts, scripts, etc.) |
6.2 XSS攻击防护
6.2.1 功能说明
XSS 是一类攻击程序的统称,是攻击者发现网站漏洞写的攻击程序的统称。这些程序通常是 JS,也可以是 Java,flash,html 等。攻击成功可以实现:更高的权限,私密的会话,cookie 等。
开启「XSS攻击防护」功能后,请求头部默认增加X-XSS-Protection:1; mode=block设置,启用 XSS 过滤器,当检测到跨站脚本攻击 (XSS (en-US))时,浏览器将停止加载页面。
注:X-XSS-Protection 响应头是 Internet Explorer,Chrome 和 Safari 的一个特性。
6.2.2 设置方法
管理员登录数据决策系统,点击「管理系统>安全管理>安全防护」,开启「Security Headers 」功能。点击「高级设置」,即可开启「XSS攻击防护」。如下图所示:
超级管理员可通过「fine_conf_entity可视化配置插件」修改具体策略。
注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。
配置项 | 配置值 | 语法 | 含义 |
---|---|---|---|
WebSecurityConfig.xssProtectionHeader | 0 | 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 点击劫持攻击防护
6.3.1 功能说明
点击劫持(ClickJacking)是一种视觉上的欺骗手段,诱使用户与隐藏页面交互,进行危险操作。
攻击方式如下:
攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,此时用户将在不知情的情况下点击到透明的iframe页面。
攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义。
开启「点击劫持攻击防护」按钮后,请求头部默认增加X-Frame-Options:SAMEORIGIN设置,阻止站点内的页面被其他页面嵌入。
该响应头是用来给浏览器指示允许一个页面可否在 <frame>、<iframe>、<embed> 或者 <object> 中展现的标记。站点可以使用此功能来确保网站没有被嵌入到别人的站点里面,从而避免点击劫持攻击。
6.3.2 设置方法
管理员登录数据决策系统,点击「管理系统>安全管理>安全防护」,开启「Security Headers 」功能。点击「高级设置」,即可开启「点击劫持攻击防护」。如下图所示:
超级管理员可通过「fine_conf_entity可视化配置插件」修改 X-Frame-Options 的具体策略。
注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。
配置项 | 配置值 | 含义 |
---|---|---|
WebSecurityConfig.frameOptionsHeader | deny | 浏览器会拒绝当前页面加载任何 frame 页面 |
sameorigin | 表示该页面可以在相同域名页面的 frame 中展示 | |
allow-from URL地址 示例:allow-from https://example.com/ | 表示该页面可以在指定来源(https://example.com/)的 frame 中展示 |
6.3.3 注意事项
「点击劫持攻击防护」开启后,默认页面只能在同一个域中加载。
如果使用跨域 iframe 的方式嵌入报表,会出现无法访问报表的情况,关闭 Security Headers 高级设置中的「点击劫持攻击防护」按钮即可。如下图所示:
6.4 内容嗅探攻击防护
6.4.1 功能说明
MIME 是一种标准,多用途互联网邮件扩展。它表明了文档、文件或各种字节的性质和格式。
一般情况下,浏览器会通过响应头的 Content-Type 字段来分辨资源类型。当有些资源的 Content-Type 是错的或者未定义时,某些浏览器会启用 MIME-sniffing 来猜测该资源的类型,解析内容并执行。
开启「内容嗅探攻击防护」后:请求头部默认增加X-Content-Type-Options:nosniff设置,禁用浏览器类型猜测来保证安全性。
6.4.2 设置方法
管理员登录数据决策系统,点击「管理系统>安全管理>安全防护」,开启「Security Headers 」功能。点击「高级设置」,即可开启「内容嗅探攻击防护」,如下图所示:
超级管理员可通过「fine_conf_entity可视化配置插件」修改 X-Content-Type-Options 的具体策略。
注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。
配置项 | 配置值 | 语法 | 含义 |
---|---|---|---|
WebSecurityConfig.contentTypeOptionsHeader | nosniff | X-Content-Type-Options: nosniff | 下面两种情况的请求将被阻止: 1)请求类型是"style" 但是 MIME 类型不是 "text/css" 2)请求类型是"script" 但是 MIME 类型不是 JavaScript MIME 类型 |
6.4.3 注意事项
「内容嗅探攻击防护」开启后,会阻止 MIME 类型不匹配的跨域资源共享。
如果用户单点登录失败,在浏览器界面 F12 打开控制台,出现跨域相关报错,请关闭 Security Headers 高级设置中的「内容嗅探攻击防护」按钮。如下图所示:
6.5 浏览器缓存禁用
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 还没有出来。
开启「浏览器缓存禁用」功能后,请求头部默认增加Cache-Control:no-cache、Pragma:no-cache&Expires:0设置。
6.5.2 设置方法
管理员登录数据决策系统,点击「管理系统>安全管理>安全防护」,开启「Security Headers 」功能。点击「高级设置」,即可开启「浏览器缓存禁用」。如下图所示:
超级管理员可通过「fine_conf_entity可视化配置插件」修改具体策略。
注:修改 FineDB 数据库表字段值的方法请参考 FineDB 常用表字段修改 。
配置项 | 配置值 | 配置示例 | 语法 | 含义 |
---|---|---|---|---|
WebSecurityConfig.cacheControlHeader 注:浏览器缓存禁用 Header Cache-Control 的值 | no-cache | no-cache | Cache-control: no-cache | 在发布缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证(协商缓存验证) 注:与Cache-control: max-age=3600不冲突,可同时设置 |
max-age=<seconds> | max-age=3600 | Cache-control: max-age=3600 | 设置缓存存储的最大周期,超过这个时间缓存被认为过期(单位秒) 注:与Cache-control: no-cache不冲突,可同时设置 | |
WebSecurityConfig.cacheControlExpiresHeader 注:浏览器缓存禁用 Header Expires 的值 | 0 | 0 | Expires: <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-cache | no-cache | Pragma: no-cache | 与 Cache-Control: no-cache 效果一致 强制要求缓存服务器在返回缓存的版本之前将请求提交到源头服务器进行验证 |
7. 请求响应优化
7.1 功能说明
11.0.14 及之后版本的工程默认开启「请求响应优化」按钮。
请求响应优化按钮关闭时,显示详细堆栈信息。若用户认为显示具体的堆栈信息存在安全隐患,可开启「请求响应优化」按钮。
请求响应优化按钮开启时,提供关键报错信息,屏蔽具体报错堆栈。
7.2 设置方法
管理员登录数据决策系统,点击「管理系统>安全管理>安全防护」,即可开启「请求响应优化」,如下图所示:
7.3 效果示例
示例:在数据决策系统添加一个 SQL 数据集,当使用一张不存在的数据表「用户」时,预览失败,点击「详细信息」查看预览失败原因。
1)未开启请求响应优化时,点击「详细信息」可以查看到具体的报错堆栈,如下图所示:
2)开启后,点击「详细信息」只能看到关键报错信息,错误原因为:11300001 数据集配置错误
[SQLITE_ERROR] SQL error or missing database (no such table: 用户)
注1:若用户想要看到详细报错堆栈,关闭「请求响应优化」按钮即可。
注2:11.0.14 之前版本的工程,开启请求响应优化后,所有堆栈信息统一转为简单的错误信息提示:请求错误,如需查看详细错误信息请至安全管理页面进行设置。
8. Token认证增强
8.1 功能说明
1)Token 是用户的唯一标识符。基于 Token 的身份验证逻辑如下:
首次登录时,客户端通过用户名和密码请求登录。
服务端收到登录请求后,对用户名对应的密码进行查询并验证。
验证成功后,服务端根据用户信息,生成一个与该用户绑定的 Token(令牌:唯一标识符),下发给客户端。
客户端收到 Token 后存储到本地,每次向服务端请求资源的时需要带着服务端签发的 Token。
服务端收到请求,验证客户端请求中带着的 Token,验证成功,向客户端返回请求的数据,验证失败返回错误信息,要求客户端重新登录。
2)Token 的安全隐患
Token 签发后,在有效期内始终有效,服务端无法强制让 Token 失效。
攻击者窃取到 Token 后,可以在其他机器上发送请求冒充用户登录,存在安全隐患。
3)验证 Token 对应的 IP 地址,防止 Token 被攻击者劫持盗用。
「Token认证增强」按钮默认关闭。
Token 对应的状态服务器中存储了首次请求登录时对应的 IP 地址。
开启「Token认证增强」后,服务器在收到请求后,验证 Token 和 Token 对应的 IP 地址:
如果当前请求 IP 与 Token 对应的 IP 地址一致,则自动放行。
如果当前请求 IP 与 Token 对应的 IP 地址不一致,则视为非法请求,自动跳转到登录页,需要重新登录。
注:对于配置了负载均衡的集群环境,如需开启「Token认证增强」,请确保负载均衡策略为ip_hash,以保持会话一致性。
8.2 设置方法
管理员登录数据决策系统,点击「管理系统>安全管理>安全防护」,即可开启「Token认证增强」,如下图所示:
8.3 效果示例
开启「Token认证增强」后,如果请求 IP 发生变更,系统会弹窗提示「登录信息已失效,请重新登录」。
点击「确定」后,跳转至系统登录页,重新登录即可。如下图所示:
9. Referer校验
注:该功能默认不启用。
9.1 功能说明
HTTP 请求头中的 Referer 字段中包含了 HTTP 请求的来源信息,即用户是从哪个网页进入到当前页面的。
基于 Referer 字段,在服务器端设置访问控制规则(如白名单),限制用户只能从固定网页跳转访问服务器资源,防止服务器资源被非法盗用。
在 FineReport 中开启 Referer 校验并配置白名单后,将根据白名单对访客的身份进行识别和过滤,防止报表工程里的报表被直接访问或者被其他网站链接访问。
9.2 设置方法
超级管理员可通过以下配置项修改 Referer 校验的具体策略。
注:工程 fine_conf_entity 表中默认不存在 Referer 校验配置项,需手动添加字段并在重启工程后生效,添加方法请参考:填报修改fine_conf_entity 。
配置项 | 配置值 | 含义/规则 |
---|---|---|
WebSecurityConfig.refererVerifyEnabled | true | 开启 Referer 校验 |
false | 关闭 Referer 校验(默认值) | |
WebSecurityConfig.refererWhiteList | 格式:["item1","item2"] 示例:["http://localhost:8075","localhost:8075","localhost"] | 字段值为需要配置的白名单内容,Referer 名单间使用逗号进行分隔 只有白名单内的域名能访问当前资源,白名单以外的域名均无法访问当前资源 |
WebSecurityConfig.refererAllowEmpty | true | 请求中的 Referer 字段为空或无 Referer 字段时,允许用户访问当前资源 |
false | 请求中的 Referer 字段为空或无 Referer 字段时,不允许用户访问当前资源 注:11.0.17 及之前版本,该字段值固定为 true,即使更改为 false,也会按照 true 的逻辑生效。 |
9.3 效果示例
点击下载模板:填报修改Referer校验配置项.cpt
参考 填报修改fine_conf_entity 修改 Referer 校验的配置项。
注:推荐用户根据 9.3.2 节,在开启 Referer 校验的同时配置白名单,否则会导致无法登录数据决策系统,并且无法更改校验策略,效果如 9.3.1 节所示。
9.3.1 开启Referer校验
1)在工程 fine_conf_entity 表中新增「WebSecurityConfig.refererVerifyEnabled」字段,设置字段值为true。
点击「提交」,重启工程后配置项生效,开启 Referer 校验。如下图所示:
2)在 FineReport 设计器中点击菜单栏「服务器>报表平台管理」,访问工程失败,如下图所示:
3)按 F12 键,或者单击鼠标右键点击检查,打开 Chrome 的控制台,切换至「Network」,查看请求的状态码和 Referer 字段。
查看有 Referer 字段的请求,由于未配置白名单,白名单的内容为空,不允许所有域名访问当前资源,因此请求异常,返回 403 状态码。如下图所示:
查看无 Referer 字段的请求,由于「WebSecurityConfig.refererAllowEmpty」配置项的字段值固定为ture,允许 Referer 字段为空或无 Referer 字段的请求访问当前资源,因此请求成功,返回状态码 200。如下图所示:
9.3.2 开启Referer校验并配置白名单
示例:开启 Referer 校验,并设置白名单为 ["localhost"]。
1)在工程 fine_conf_entity 表中新增以下字段:
新增「WebSecurityConfig.refererVerifyEnabled」字段,设置字段值为true,开启 Referer 校验。
新增「WebSecurityConfig.refererWhiteList」字段,设置字段值为["localhost"] ,允许来自域名localhost的请求访问资源。
点击「提交」,重启工程后配置项生效。如下图所示:
2)在 FineReport 设计器中点击菜单栏「服务器>报表平台管理」,访问工程成功。如下图所示:
3)按 F12 键,或者单击鼠标右键点击检查,打开 Chrome 的控制台,切换至「Network」,查看有 Referer 字段的请求。
比如Referer:http://localhost:8075/webroot/decision ,域名为localhost,在白名单内,允许访问当前资源。如下图所示:
9.4 注意事项
若用户配置了 CAS 单点登录,需要将报表工程的 URL 和的 CAS 的 URL 都加入白名单,否则会登录失败。
若用户配置了跨域单点登录,需要将跨域的两个报表工程的 URL 都加入白名单,否则会登录失败。
如下图所示:
10. URL分号过滤机制
10.1 功能说明
Tomcat 在解析用户请求的 URL 时,如果 URL 中包含分号,则 Tomcat 会过滤掉分号与斜杠之间的字符串内容(包括分号)并进标准化处理。
攻击者可以利用分号绕过权限验证机制,访问敏感资源或执行恶意操作,危害系统的安全性。
11.0.19 及之后版本,FineReport 新增 URL 配置项,可以禁止在 URL 中使用分号,以防止路径遍历攻击、权限绕过以及 URL 混淆和欺骗等安全问题。
10.2 设置方法
超级管理员可通过以下配置项设置是否允许在 URL 中使用分号。
注:工程 fine_conf_entity 表中默认不存在以下配置项,需手动添加字段并在重启工程后生效,添加方法请参考:填报修改fine_conf_entity 。
配置项 | 配置值 | 含义/规则 |
---|---|---|
WebSecurityConfig.allowURLSemicolon | true/未配置参数值(默认情况) | 允许在 URL 中使用分号 |
false | 不允许在 URL 中使用分号 |
10.3 效果示例
10.3.1 允许在URL中使用分号
在未配置「WebSecurityConfig.allowURLSemicolon」参数、或参数值为 true 的情况下,FineReport 允许在 URL 中使用分号作为分隔符。
例如,浏览器访问带分号的URLhttp://localhost:8075/webroot/decision/;12345/login,则 Tomcat 会过滤掉;xxx/分号与斜杠之间的字符串内容(包括分号)并进标准化处理。
实际访问效果为http://localhost:8075/webroot/decision/login,可以正常访问工程,如下图所示:
10.3.2 参数值为false
1)参考 填报修改fine_conf_entity 在工程 fine_conf_entity 表中新增「WebSecurityConfig.allowURLSemicolon」字段,设置参数值为「false」。如下图所示:
重启工程后配置项生效,不允许在 URL 中使用分号。
2)浏览器访问带分号的 URL:http://localhost:8075/webroot/decision/;12345/login,请求错误,无法访问工程,如下图所示: