开放能力安全策略
1. 概述
为进一步保障数据安全、防范恶意攻击,BI平台 从 6.6.0 2025-07发布的版本起,针对开放能力的代码执行新增了两种安全模式,适用于自定义图表和插件。
免责说明:
-
代码编写规范建议参考 Airbnb JavaScript Style Guide;禁止使用任何不安全或不允许的写法
-
插件开发应遵循
最小范围
原则:- 自定义图表 Iframe,仅用于纯粹的图表绘制,仅允许使用和操作 iframe 内且非存储信息的资源。
- 自定义图表 Lite, 仅用于纯粹的图表绘制,仅允许使用明确提供的信息
- 插件管理,仅用于使用 OpenSDK 提供的开放能力进行信息的读取和操作
-
任何插件禁止使用存储相关的 API、也禁止以任何形式读取或变更存储信息
2. 安全模式说明
2.1. 安全模式等级
安全模式分为两级:
- 执行安全:基础安全限制,保障代码执行过程的安全性
- 执行安全+写入安全:在执行安全的基础上,额外限制写入操作。
注意:目前开启此模式后,将关闭自定义图表和插件的创建与修改功能。
2.2. 开启方式
安全模式需要通过运维手段开启,如需开启请联系观远数据运维同学。
2.3. 开关控制规则
- 自定义图表的 Iframe 模式和 Lite 模式共用一个安全模式开关
- 插件独立使用一个安全模式开关,与自定义图表的开关互不影响
2.4. 注意事项
开启安全模式会对自定义图表和插件的代码执行产生限制,可能导致包含危险写法的已定制开发图表或插件不可用,需进行额外适配。但无需过度担忧,绝大部分定制需求仍可在安全写法下完成。
关闭安全模式虽能为定制开发提供便利,但也会大幅增加被攻击的风险,请客户谨慎选择。
3. 具体限制
3.1. 自定义图表-Iframe
- 开启 严格模式
- 禁止通过
global
、self
访问window
对象 - 禁止使用
XMLHttpRequest
、WebSocket
等通信类 API - 禁止通过
window.parent
访问宿主页面的任何信息(包括使用postMessage
方法) - 禁止访问任何存储信息:
cookie
、localStorage
、sessionStorage
、indexedDB
- 禁止使用危险方法:
eval
、Function
、constructor
3.2. 自定义图表-Lite
- 开启 严格模式
- 禁止使用
document
、globalThis
、self
;window
仅允许访问GD
和echarts
两个属性特别注意:
window
仅允许访问GD
和echarts
两个属性 在非安全模式下也生效 - 禁止使用
fetch
、XMLHttpRequest
、WebSocket
等通信类 API - 禁止访问任何存储信息:
cookie
、localStorage
、sessionStorage
、indexedDB
- 禁止使用危险方法:
eval
、Function
、constructor
3.3. 插件
- 开启 严格模式
- 禁止通过
globalThis
、self
访问window
- 禁止使用
fetch
、XMLHttpRequest
、WebSocket
等通信类 API,发送请求需使用GD.fetch
(仅允许/api/
类请求) - 禁止访问任何存储信息:
cookie
、localStorage
、sessionStorage
、indexedDB
- 禁止使用危险方法:
eval
、Function
、constructor