跳转到正文
报告库
用途分类 / 数据分析

Lark Sheets Skill 安全审计

作者说它能做什么(原文)

飞书电子表格:创建和操作电子表格。支持创建表格、管理工作表与行列结构(增删/合并/调整尺寸/隐藏/冻结)、读写单元格(值/公式/样式/批注/单元格图片)、查找替换、多操作批量更新,以及图表、透视表、条件格式、筛选器、迷你图、浮动图片等对象的创建与维护。当用户需要创建电子表格、管理工作表、批量读写或编辑数据、统计汇总与可视化、表格美化、公式计算(含 Excel 公式迁移)、金融/财务建模(DCF、三张表、预算、Sensitivity 等)等任务时使用。若用户是想按名称或关键词搜索云空间(云盘/云存储)里的表格文件,请改用 lark-drive 的 drive +search 先定位资源。当用户给出 doubao.com 的 /sheets/ URL/token 时,也应直接使用本 skill,不要因为域名不是飞书而回退到 WebFetch;路由依据是 URL 路径模式和 token,而不是域

第三方安全检查结论

先别安装或运行

本次检查尚未完成,以下仅展示已取得的结果。

已检查文件
29
发现的风险
4
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。未发现风险
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。未发现风险
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。发现 2 项风险
高风险

整本工作簿回滚被标为高风险,但示例没有用户确认门禁

原文依据:7 处
发现了什么

回滚会用历史版本覆盖当前工作簿,文档明确称其为高风险写入;但该命令的系统 flag 只列出 `--dry-run`,实际执行示例也未要求 `--yes`。它还未出现在主文件的强确认命令清单中。

为什么需要注意

代理若在未再次取得明确同意时调用该示例,当前版本之后的单元格、公式、对象及协作者近期修改都可能被整本覆盖。

文档确认回滚会覆盖整本工作簿且属于高风险写入,但命令声明和执行示例都没有 `--yes` 门禁;主文件的强确认清单也未列出它。虽然文档要求事前告知用户影响,但没有明确要求取得同意。因此,代理可能在告知不足或未获明确批准时发起异步回滚,影响当前内容。用户可要求作者将回滚纳入统一的 dry-run、明确同意、`--yes` 协议。

references/lark-sheets-history.md:5来自说明文档打开原文件
每张飞书电子表格保留一串历史版本(`minor_histories`)。每个版本由 `history_version_id` 标识,并附带创建时间(`create_time`)、动作(`action`)与块修订信息(`all_block_revision`)。历史是**工作簿级**的(针对整张电子表格,不针对单个子表)。回滚(revert)把电子表格的当前内容覆盖回某个历史版本——这是一个**高风险写入**操作,且为**异步**:发起后立即返回受理标识,真正的回滚在后台进行,需通过状态查询轮询最终结果(进行中 / 成功 / 失败)。
查看另外 6 个位置
references/lark-sheets-history.md:34来自说明文档打开原文件
| --- | --- | --- || `+history-list` | read | 历史版本 || `+history-revert` | high-risk-write | 历史版本 || `+history-revert-status` | read | 历史版本 |
references/lark-sheets-history.md:48来自说明文档打开原文件
### `+history-revert`_公共:URL/token(无 sheet 定位) · 系统:`--dry-run`_| Flag | Type | 必填 | 说明 || --- | --- | --- | --- || `--history-version-id` | string | required | 要回滚到的历史版本(取自 +history-list) |
references/lark-sheets-history.md:81来自说明文档打开原文件
### `+history-revert````bash# 回滚到指定历史版本(异步受理)lark-cli sheets +history-revert --url "https://sample.feishu.cn/sheets/SHTxxxxxx" --history-version-id "<id-from-history-list>"```
references/lark-sheets-history.md:7来自说明文档打开原文件
回滚(revert)把电子表格的当前内容覆盖回某个历史版本——这是一个**高风险写入**操作,且为**异步**:发起后立即返回受理标识,真正的回滚在后台进行,需通过状态查询轮询最终结果(进行中 / 成功 / 失败)。
references/lark-sheets-history.md:24来自说明文档打开原文件
**注意事项(必须了解)**:- **回滚是高风险写入操作**:会用历史版本内容覆盖当前表格,执行前应明确告知用户影响。- **回滚是异步的**:`+history-revert` 返回的是 `transaction_id`(受理标识),不代表回滚已完成;必须用 `+history-revert-status --transaction-id <transaction_id>` 确认最终结果。- **`history_version_id` 与 `transaction_id` 不是同一个**:`history_version_id` 用于 `+history-revert`(取自 `+history-list`);`transaction_id` 用于 `+history-revert-status`(取自 `+history-revert` 的输出)。
SKILL.md:220来自说明文档打开原文件
> ⚠️ **high-risk-write 命令清单(exit 10 强确认门禁)**:`+batch-update`、`+cells-clear`、`+cells-batch-clear`、`+sheet-delete`、`+dim-delete`、`+dropdown-delete`,以及各对象删除 `+chart-delete` / `+pivot-delete` / `+cond-format-delete` / `+filter-delete` / `+filter-view-delete` / `+sparkline-delete` / `+float-image-delete`。>> **审批协议**:先 `--dry-run` 预览、向用户展示将执行的操作与影响范围,**获得用户明确同意后**再在原命令追加 `--yes` 执行。未经用户同意不得带 `--yes`,也不得在 exit 10 后静默补 `--yes` 重试——那等于禁用门禁。完整协议见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md)。
中风险

普通单元格和 CSV 写入默认允许覆盖,错误落点可静默破坏现有数据

原文依据:3 处
发现了什么

`+cells-set` 和 `+csv-put` 的覆盖保护默认关闭:`allow-overwrite` 默认为 true。CSV 的 range 只指定左上角,实际写入会按 CSV 尺寸继续扩展,即使传入较小范围也不会形成边界。浮动图更新流程还建议先把新图写入“任意临时单元格”再清除,未在该步骤强制确认该格为空。

为什么需要注意

错误的起始格、行列尺寸或所谓临时格可能覆盖已有值、公式、批注或图片;随后清理临时格还可能删除原内容。

这些是正常的表格写入能力,但默认覆盖会放大定位错误的影响:`cells-set` 默认可覆盖非空格,而 CSV 参数只限定左上角,内容会按实际尺寸继续扩展并覆盖。文档提供 dry-run、回读和 `allow-overwrite=false` 缓解措施;浮动图换图流程还会暂时占用一个单元格。用户可要求代理先验证完整落区为空、禁用覆盖,并指定或批准临时格。

references/lark-sheets-write-cells.md:127来自说明文档打开原文件
- 不要把 `cells` 写成字符串化 JSON- `+cells-set` 默认即覆盖非空 cell(`--allow-overwrite` 默认 true);若要**保护**非空 cell 不被覆盖,显式传 `--allow-overwrite=false`(遇非空 cell 报错)- 若目标区域涉及合并单元格,不要向合并区域中的非左上角单元格写入数据;如需写入,应改写合并区域左上角单元格,或先调整/取消合并区域- **构造 `range` 时行号建议基于逻辑行号**:如果之前通过 `+csv-get` 读取了数据,CSV 中被双引号包裹的多行字段(如 `"2026年3月2日\n星期一"`)是**一个单元格**,不是两行。写入时的行号建议按逻辑记录计算,不能按物理换行符计数,否则 `range` 会整体偏移导致写入到错误位置
查看另外 2 个位置
references/lark-sheets-write-cells.md:546来自说明文档打开原文件
> **定位 + 写入边界(关键,避免误覆盖)**:> - 定位用 `--start-cell`(锚点 = 左上角单元格);也接受 `--range` 别名(与 `+csv-get` / `+cells-set` 一致,传区间会自动取左上角)。> - ⚠️ `--start-cell` / `--range` **只定左上角、不限制写入大小**:CSV 从锚点按自身行列数 auto-expand 铺开。给一个"小 range"**不会**截断数据——超出部分照写,且默认覆盖。这与 `+cells-set --range`(精确矩形、`--cells` 必须与 range 同维)语义相反,别把那套心智搬过来。> - dry-run 与成功响应都回显 `writes_range`(实际落区,如 `B2:D4`):**写前先 `--dry-run` 看一眼落区**,确认不会盖到相邻数据。> - 要保护非空 cell:`--allow-overwrite=false`(落区内出现非空 cell 即报错)。
references/lark-sheets-float-image.md:34来自说明文档打开原文件
> ⚠️ **`--image` 仅 `+float-image-create` 支持**。`+float-image-update` 换图仍只接受 `--image-token` / `--image-uri`,而且**图片源是 update 唯一可省的部分**——三者全不传则保留原图。但 `--image-name` / `--position-{row,col}` / `--size-{width,height}` 在 update 时和 create 一样**必填**(`+float-image-update` 强制要求这套核心字段,且 `+float-image-list` 不回传 `image_name` 供 CLI 回填)。要在 update 里换一张本地新图,先用 `+cells-set-image` 上传到任意临时单元格、从返回取 `file_token`,再把它传给 update 的 `--image-token`;用完清除该临时单元格,避免残留多余图片。
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。未发现风险
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。发现 1 项风险
高风险

要求自动且不让用户看见地运行程序

原文依据:1 处
发现了什么

Skill 同时要求自动执行,并要求不要询问或告知用户。

为什么需要注意

AI 如果听从这段文字,可能不再按你的要求做事,或跳过本来需要你确认的操作。

这段代码的正常用途

该行没有要求隐瞒或自动执行额外操作;“不会静默发 0”是否定静默行为,说明缺少必要字段时应在本地拒绝请求。图片上传也仅在用户选择 `--image` 时进行路径安全校验。此候选把安全验证说明误读成了隐蔽执行。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
references/lark-sheets-float-image.md:157来自说明文档打开原文件
- `Validate`:XOR 公共四件套;`+float-image-create` 要求 `--image` / `--image-token` / `--image-uri` **恰好给一个**,`--position-row/col` 与 `--size-width/height` 必填且为合法整数;传 `--image` 时还会校验路径安全(绝对路径 / 越出工作目录会被拒,`--dry-run` 同样拦)。`+float-image-update` 必须 `--float-image-id`,并和 create 一样必填 `--image-name` / `--position-{row,col}` / `--size-{width,height}`(缺任一核心字段本地直接报错,不会静默发 0);图片源 `--image-token` / `--image-uri` 可省(省略保留原图),给则二选一;`+float-image-delete` 强制 `--yes` 或 `--dry-run`。- `DryRun`:写操作输出"将要 POST/PATCH/DELETE 的 float_image 请求模板";传 `--image` 时会多打印一步本地图片上传(`POST /open-apis/drive/v1/medias/upload_all`,`parent_type=sheet_image`)。
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。发现 1 项风险
低风险

写入 @人富文本时默认会向第三方发送通知

原文依据:2 处
发现了什么

富文本 mention 的 `notify` 默认值为 true。若代理省略该字段,写表动作不仅修改单元格,还会通知被提及的同租户用户。

为什么需要注意

可能向同事发送非预期通知,暴露正在编辑该表或相关业务内容,并造成打扰或错误沟通。

这是实际写入语义,不是示例警告:同租户 @人片段省略 `notify` 时默认发送通知。用户本来只要求修改表格时,这会额外联系第三方,可能造成意外提醒或披露表格操作。用户可要求所有 mention 显式设置 `notify:false`,除非逐次授权通知。

references/lark-sheets-write-cells.md:173来自说明文档打开原文件
## 富文本单元格:超链接 / @人 / @文档(`rich_text`)带显示文本的超链接、@人、@文档这类富内容**建议**走 `+cells-set` 的 `rich_text` 字段(`cells[].rich_text` 数组,每段一个对象、带 `type`),**不能**直接传普通字符串——纯字符串只会被当作纯文本存进单元格。完整字段跑 `lark-cli sheets +cells-set --print-schema --flag-name cells`,常用段类型:- **超链接(带显示文本)**:`{"type":"link","text":"飞书","link":"https://www.feishu.cn"}`。纯 URL 不需要 `rich_text`,直接写普通字符串即可。- **@人**:`{"type":"mention","mention_token":"<userId>","notify":false}`。**仅支持同租户用户,单次写入最多 50 人。** `notify` **默认 `true`**(会给被 @ 的人发通知),不想发务必显式传 `false`。- **@文档**:同样 `"type":"mention"`,`mention_token` 传文档 token(如 `shtXXX`)。
查看另外 1 个位置
references/lark-sheets-write-cells.md:175来自说明文档打开原文件
带显示文本的超链接、@人、@文档这类富内容**建议**走 `+cells-set` 的 `rich_text` 字段(`cells[].rich_text` 数组,每段一个对象、带 `type`),**不能**直接传普通字符串——纯字符串只会被当作纯文本存进单元格。完整字段跑 `lark-cli sheets +cells-set --print-schema --flag-name cells`,常用段类型:- **超链接(带显示文本)**:`{"type":"link","text":"飞书","link":"https://www.feishu.cn"}`。纯 URL 不需要 `rich_text`,直接写普通字符串即可。- **@人**:`{"type":"mention","mention_token":"<userId>","notify":false}`。**仅支持同租户用户,单次写入最多 50 人。** `notify` **默认 `true`**(会给被 @ 的人发通知),不想发务必显式传 `false`。- **@文档**:同样 `"type":"mention"`,`mention_token` 传文档 token(如 `shtXXX`)。

Skill 逻辑拆解

7 个说明模块

该 Skill 的声明用途是读取、创建和编辑飞书电子表格,包括单元格、工作表、图表、透视表、筛选器、图片及历史版本;因此正常使用会访问在线表格,并可能产生持久修改。

查看原文
SKILL.md:2来自说明文档打开原文件
---name: lark-sheetsversion: 3.1.8description: "飞书电子表格:创建和操作电子表格。支持创建表格、管理工作表与行列结构(增删/合并/调整尺寸/隐藏/冻结)、读写单元格(值/公式/样式/批注/单元格图片)、查找替换、多操作批量更新,以及图表、透视表、条件格式、筛选器、迷你图、浮动图片等对象的创建与维护。当用户需要创建电子表格、管理工作表、批量读写或编辑数据、统计汇总与可视化、表格美化、公式计算(含 Excel 公式迁移)、金融/财务建模(DCF、三张表、预算、Sensitivity 等)等任务时使用。若用户是想按名称或关键词搜索云空间(云盘/云存储)里的表格文件,请改用 lark-drive 的 drive +search 先定位资源。当用户给出 doubao.com 的 /sheets/ URL/token 时,也应直接使用本 skill,不要因为域名不是飞书而回退到 WebFetch;路由依据是 URL 路径模式和 token,而不是域名。"metadata:  requires:    bins: ["lark-cli"]    siblings: ["lark-shared"]  cliHelp: "lark-cli sheets --help"---

多数列出的删除和批量清除命令有明确的高风险审批流程:先 dry-run 展示范围,取得用户同意后才添加 `--yes`。

查看原文
SKILL.md:220来自说明文档打开原文件
> ⚠️ **high-risk-write 命令清单(exit 10 强确认门禁)**:`+batch-update`、`+cells-clear`、`+cells-batch-clear`、`+sheet-delete`、`+dim-delete`、`+dropdown-delete`,以及各对象删除 `+chart-delete` / `+pivot-delete` / `+cond-format-delete` / `+filter-delete` / `+filter-view-delete` / `+sparkline-delete` / `+float-image-delete`。>> **审批协议**:先 `--dry-run` 预览、向用户展示将执行的操作与影响范围,**获得用户明确同意后**再在原命令追加 `--yes` 执行。未经用户同意不得带 `--yes`,也不得在 exit 10 后静默补 `--yes` 重试——那等于禁用门禁。完整协议见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md)。

认证、权限处理及完整审批协议被委托给 `../lark-shared/SKILL.md`;该文件内容未出现在所提供证据中,因此无法从这些行独立核实其权限范围或实现。

查看原文
SKILL.md:14来自说明文档打开原文件
**CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理。**
SKILL.md:215来自说明文档打开原文件
| --- | --- | --- | --- || `--dry-run` | bool | 否 | 零副作用:仅打印请求路径与参数模板,不发起调用;多步操作会输出每个子操作的请求模板 || `--yes` | bool | 是(仅 `high-risk-write`) | 二次确认;不带时退出码 10。详见 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md) 高风险审批协议 || `--print-schema` | bool | 否 | 本地打印复合 JSON flag 的 JSON Schema 并退出,不发起调用、不需要其它 required flag。搭配 `--flag-name` 指定查哪个 flag;省略时列出该 shortcut 可查询的 flag。仅对含复合 JSON flag 的 shortcut 有效。 |
从这里开始 · 工作说明SKILL.md
lark-sheets
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。

文件引用关系图

34 处引用
哪些文件发起引用引用了什么
连线表示真实的文件引用,不是运行顺序。点击节点可高亮相关连线,并查看具体文件和原文位置。虚线表示还有文件需要定位。
文件与检查记录29 个文件

检查范围与遗漏

  • 有检测结果未通过证据校验或未完成处理,本报告不能代表完整检查。
逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • scripts/lark_chart_layout_check.py已纳入全文
  • scripts/lark_detect_subtables.py已纳入全文
  • scripts/lark_inspect_workbook.py已纳入全文
  • scripts/lark_profile_table.py已纳入全文
  • scripts/lark_sheet_range.py已纳入全文
  • scripts/lark_sheet_read_cli.py已纳入全文
  • scripts/sheets_df.py已纳入全文
  • references/lark-sheets-batch-update.md已纳入全文
  • references/lark-sheets-changeset.md已纳入全文
  • references/lark-sheets-chart.md已纳入全文
  • references/lark-sheets-conditional-format.md已纳入全文
  • references/lark-sheets-filter-view.md已纳入全文
  • references/lark-sheets-filter.md已纳入全文
  • references/lark-sheets-float-image.md已纳入全文
  • references/lark-sheets-formula-translation.md已纳入全文
  • references/lark-sheets-formula-verify.md已纳入全文
  • references/lark-sheets-history.md已纳入全文
  • references/lark-sheets-legacy-command-migration.md已纳入全文
  • references/lark-sheets-pivot-table.md已纳入全文
  • references/lark-sheets-range-operations.md已纳入全文
  • references/lark-sheets-read-data.md已纳入全文
  • references/lark-sheets-search-replace.md已纳入全文
  • references/lark-sheets-sheet-structure.md已纳入全文
  • references/lark-sheets-sparkline.md已纳入全文
  • references/lark-sheets-styles-put.md已纳入全文
  • references/lark-sheets-visual-standards.md已纳入全文
  • references/lark-sheets-workbook.md已纳入全文
  • references/lark-sheets-write-cells.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • references/lark-sheets-batch-update.md配套文件
  • references/lark-sheets-changeset.md配套文件
  • references/lark-sheets-chart.md配套文件
  • references/lark-sheets-conditional-format.md配套文件
  • references/lark-sheets-filter-view.md配套文件
  • references/lark-sheets-filter.md配套文件
  • references/lark-sheets-float-image.md配套文件
  • references/lark-sheets-formula-translation.md配套文件
  • references/lark-sheets-formula-verify.md配套文件
  • references/lark-sheets-history.md配套文件
  • references/lark-sheets-legacy-command-migration.md配套文件
  • references/lark-sheets-pivot-table.md配套文件
  • references/lark-sheets-range-operations.md配套文件
  • references/lark-sheets-read-data.md配套文件
  • references/lark-sheets-search-replace.md配套文件
  • references/lark-sheets-sheet-structure.md配套文件
  • references/lark-sheets-sparkline.md配套文件
  • references/lark-sheets-styles-put.md配套文件
  • references/lark-sheets-visual-standards.md配套文件
  • references/lark-sheets-workbook.md配套文件
  • references/lark-sheets-write-cells.md配套文件
  • scripts/lark_chart_layout_check.py脚本
  • scripts/lark_detect_subtables.py脚本
  • scripts/lark_inspect_workbook.py脚本
  • scripts/lark_profile_table.py脚本
  • scripts/lark_sheet_range.py脚本
  • scripts/lark_sheet_read_cli.py脚本
  • scripts/sheets_df.py脚本

代码和说明中提到的操作

运行命令
scripts/lark_sheet_read_cli.py:8来自代码打开原文件
import jsonimport subprocessimport sys
scripts/lark_sheet_read_cli.py:68来自代码打开原文件
    try:        completed = subprocess.run(            cmd,
scripts/lark_sheet_read_cli.py:77来自代码打开原文件
        raise LarkCliError("lark-cli not found", cmd=cmd) from exc    except subprocess.TimeoutExpired as exc:        raise LarkCliError(f"lark-cli timed out after {timeout}s", cmd=cmd) from exc
连接外部网站
scripts/lark_chart_layout_check.py:268来自代码打开原文件
def _locator(target: str) -> dict[str, str]:    return {"url": target} if target.startswith(("http://", "https://")) else {"spreadsheet_token": target}
SKILL.md:208来自说明文档打开原文件
# 统一调用范式:两组定位缺一不可(占位符别原样填;表名先 +workbook-info 查)lark-cli sheets +csv-get --url "https://.../sheets/shtXXX" --sheet-name "<真实表名>" --range "A1:F30"```
references/lark-sheets-batch-update.md:166来自说明文档打开原文件
```bashlark-cli sheets +batch-update --url "https://example.feishu.cn/sheets/shtXXX" --yes \  --operations @ops.json
读取了多少行
7,231
文件校验值(用于核对版本)
580652fff53522fd7776ac100f30c469fe3818331a60ea3646a5fb4a1ba399c2