跳到主要内容

上线安全配置(重要)

权限安全设置非常重要,老版本存在被攻击的情况,从 v1.6.2+ 增加了此机制。

正式环境配置

  • 设置 lowCodeMode:prod ,可以彻底关闭在线报表设计,屏蔽所有风险;
  • 设置参数saasMode:created/tenant 可以限制只看自己数据或只看租户下数据,从而保证系统安全。
  • 内置预留角色:admindbadeveloperlowdeveloper 拥有admindbadeveloper‘、lowdeveloper 角色用户可以访问敏感接口。 拥有adminlowdeveloper 角色用户在关闭在线报表设计情况下,也可以设计报表。

重要提示:敏感接口比如测试数据库链接是否生效会提示 “权限不足,此功能需要分配角色!” ,这个时候分配上面的预留内置角色。

详细配置参数如下:

jeecg :
jmreport:
#多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增)
saasMode: tenant
# 平台上线安全配置(v1.6.2+ 新增)
firewall:
# 数据源安全 (开启后,不允许使用平台数据源、SQL解析不允许select * 查询、禁止测试数据源连接是否正确)
# 数据源安全下,预留角色有权限使用 select * 和测试数据源链接
dataSourceSafe: true
# 低代码开发模式(dev:开发模式,prod:发布模式关闭报表设计,预留角色admin、lowdeveloper可设计, prodsf:发布安全模式 彻底关闭报表设计)
lowCodeMode: prod
# api数据集内网ip白名单,在发布模式下只只能向设置了白名单的内网服务器发送请求。
apiDsIpWhite:
- 192.168.1.69
- 192.168.1.2
- 10.22.1.0/24


权限变更说明

v1.9.2+ 规则变化

  1. dataSourceSafe设置为true时,不允许创建SQLite数据源。

v1.7.7+ 规则变化

  1. lowCodeMode设置为prodprodsf时,系统将禁止向内网ip地址发送网络请求。

  2. 只有在apiDsIpWhite中设置的ip的才可以访问。

    2.1. apiDsIpWhite接收一个列表数据。

    2.2. 白名单设置方式:第一种: 直接设置具体ip(eg. 192.168.1.1)第二种: 通过子网设置网段(eg. 10.22.1.0/24)。

影响范围

  • api数据集-数据解析。
  • api数据集报表预览。
  • 动态接口数据单元格。
  • api字典

建议:为确保生产环境安全,建议不要在积木报表中通过内网ip调用内网服务。

v1.6.2+ 规则变化

  1. 多租户的配置方式变更为:saasMode
  2. 新增低代码开发模式 lowCodeMode:prod,完全禁止在线报表设计能力,彻底避免被攻击
  3. 默认报表预览地址必须带token,只能通过报表分享连接给他们访问报表

积木报表,通过几个维度保障安全

  1. 增加低代码开发模式 配置 jeecg.jmreport.firewall.lowCodeMode: prod 发布模式下会关闭所有报表设计相关接口,普通用户只能访问报表不能做任何报表修改,彻底解决被攻击风险 为了便于线上报表临时维护,用户是“admin”,或者拥有角色 "admin"、"lowdeveloper" 的用户,还可以设计报表

  2. 敏感接口,增加角色权限控制 容易被攻击的敏感接口默认加了角色权限控制,只有拥有角色 "admin","lowdeveloper","dbadeveloper" 的用户,可以访问。 接口清单如下: a. 数据预览接口 /jmreport/loadTableData b. 测试数据源连接是否正确接口 /jmreport/testConnection c. 解析SQL接口 /jmreport/queryFieldBySql

  3. 增加数据隔离配置 参数 jmreport.saasMode: created 线上发布请按照创建人或者租户实现数据隔离,保证他人数据安全 created: 按照创建人隔离、tenant: 按照租户隔离

  4. 增加数据源安全配置 参数 jeecg.jmreport.firewall.dataSourceSafe: true 开启数据源安全后,不允许使用平台数据源、SQL解析加签并且不允许查询数据库

  5. 重写了sql参数拼接的写法,全部换成占位符方式,防止被攻入的可能

  6. 进一步加强了sql注入检查算法,通过深度解析SQL,检查是否存在攻击函数等

特殊场景

如果某个人可以在测试环境下设计报表,但是不能在发布环境下设计报表,只分配角色dbadeveloper即可,当然测试环境下需要把lowCodeMode改成dev。