Skip to main content

安全 🔒

[!WARNING] 个人助理信任模型: 本指南假设每个网关有一个受信任的操作员边界(单用户/个人助理模型)。 OpenClaw 不是 用于多个对抗性用户共享一个代理/网关的恶意多租户安全边界。 如果需要混合信任或对抗用户操作,请分割信任边界(分离的网关 + 凭据,理想情况下使用不同的操作系统用户/主机)。

范围优先:个人助理安全模型

OpenClaw 的安全指导假设为个人助理部署:一个受信任的操作员边界,可能包含多个代理。
  • 支持的安全姿态:每个网关一个用户/信任边界(优选每个边界使用单独的操作系统用户/主机/VPS)。
  • 不支持的安全边界:多个相互不信任或对抗用户共用一个网关/代理。
  • 如果需要对抗用户隔离,请按信任边界分割(独立网关 + 凭据,且理想情况下分离操作系统用户/主机)。
  • 如果多个不受信任的用户可向同一启用工具的代理发送消息,则视其为共享该代理的委托工具权限。
本页说明该模型内的加固方法,不声称在一个共享网关上实现恶意多租户隔离。

快速检查:openclaw security audit

参见:形式验证(安全模型) 请定期执行(尤其是在更改配置或暴露网络面后):
openclaw security audit
openclaw security audit --deep
openclaw security audit --fix
openclaw security audit --json
它会提示常见的安全隐患(如网关认证暴露、浏览器控制暴露、提升的白名单、文件系统权限问题)。 OpenClaw 既是产品也是实验:你将前沿模型行为接入真实消息界面和真实工具。**不存在“完美安全”的设置。**目标是明确控制:
  • 谁能与你的机器人对话
  • 机器人在哪些范围可以行动
  • 机器人能够访问什么
从最小可用权限开始,随着信心增加逐步放宽。

部署假设(重要)

OpenClaw 假设主机和配置边界是受信任的:
  • 如果有人能修改网关主机状态/配置(~/.openclaw,包括 openclaw.json),则视为受信任操作员。
  • 对多个互不信任/对抗操作员运行同一网关不是推荐方案
  • 对混合信任团队,分割信任边界,分别部署网关(或至少分离操作系统用户/主机)。
  • OpenClaw 支持在一台机器上运行多个网关实例,但推荐操作为清晰的信任边界分隔。
  • 推荐默认:每台机器/主机(或 VPS)运行一个用户,每个用户运行一个网关,网关内可有一个或多个代理。
  • 多用户使用 OpenClaw 时,建议为每用户各自配置一个 VPS/主机。

实际影响(操作员信任边界)

在一个网关实例内,认证操作员访问是受信任的控制平面角色,而非每用户租户角色。
  • 拥有读/控制平面访问的操作员按设计可以查看网关会话元数据/历史。
  • 会话标识符(sessionKey、会话 ID、标签)是路由选择标记,不是授权令牌。
  • 例如,不应期望针对 sessions.listsessions.previewchat.history 等方法实现每操作员隔离。
  • 需要对抗用户隔离时,请为每个信任边界运行独立网关。
  • 技术上可在一台机器上运行多个网关,但这不是多用户隔离的推荐基线。

个人助理模型(非多租户公共平台)

OpenClaw 设计为个人助理安全模型:单一受信任操作员边界,多个代理。
  • 多人可向同一启用工具代理发送消息,则他们共享相同权限集。
  • 每用户会话/记忆隔离有助于隐私,但不等同于将共享代理转换成每用户主机授权。
  • 用户间存敌意时,请为不同信任边界运行独立网关或操作系统用户/主机。

共享 Slack 工作区:真实风险

若“Slack 中所有人均可给机器人发消息”,核心风险是委托工具权限:
  • 任何允许的发送者都能根据代理策略触发工具调用(exec、浏览器、网络/文件工具);
  • 一人发起的提示/内容注入可导致影响共享状态、设备或输出的操作;
  • 若共有代理含敏感凭据/文件,任一允许发信人均可通过工具使用触发泄露。
团队工作流请使用分离的代理/网关和最小化工具;个人数据代理须保持私密。

公司共享代理:可接受模式

当使用代理的所有人均处于同一信任边界(如公司团队),且代理仅限业务范围时,可接受此模式。
  • 运行在专用机器/虚拟机/容器;
  • 使用专用操作系统用户 + 专用浏览器/配置文件/账号;
  • 不要在该运行时登录个人 Apple/Google 账户或个人密码管理器/浏览器配置。
混合个人和公司身份会破坏隔离,提升个人数据暴露风险。

网关和节点信任概念

将网关和节点视为一个操作员信任域,不同角色分工:
  • 网关:控制平面和策略表面(gateway.auth、工具策略、路由)。
  • 节点:与该网关配对的远程执行端(命令、设备操作、本地主机能力)。
  • 认证调用者在网关范围内受信任。配对后,节点动作为该节点上的操作员行为。
  • sessionKey 用作路由/上下文选择,而非用户授权。
  • 执行批准(白名单+询问)是操作员意图保护措施,而非恶意多租户隔离。
需要恶意用户隔离时,请按操作系统用户/主机分割信任边界,运行独立网关。

信任边界矩阵

风险排查时可参考此快速模型:
边界或控制含义常见误读
gateway.auth(令牌/密码/设备认证)认证 API 调用者身份“每条消息都需要签名才能安全”
sessionKey会话/上下文选择的路由密钥“Session key 是用户授权边界”
提示/内容防护降低模型滥用风险“提示注入就等于绕过了授权”
canvas.eval / 浏览器执行启用时的操作员刻意能力“任何 JS eval 在此信任模型下自动是漏洞”
本地 TUI ! shell明确的操作员触发本地执行“本地 shell 便利命令就是远程注入”
节点配对和节点命令与节点的操作员级远程执行“远程设备控制默认算不可信用户访问”

设计上非漏洞

常见反馈但多被判定无需处理的情形:
  • 仅凭提示注入链,无策略/认证/沙箱绕过证明。
  • 假设在共享主机/配置上恶意多租户操作。
  • 将标准操作员读路径访问(如 sessions.list/sessions.preview/chat.history)误判为共享网关 IDOR。
  • 仅限 localhost 部署相关发现(如仅环回接口 HSTS)。
  • 指向不存在入站路径的 Discord Webhook 签名发现。
  • sessionKey 当作授权令牌的 “缺少每用户授权” 判定。

研究员预检清单

提交 GHSA 前核对:
  1. 最新 main 或最新发布版仍能重现。
  2. 报告含准确代码路径(文件、函数、行号)和测试版本/提交。
  3. 影响跨越明确记录的信任边界(非仅提示注入)。
  4. 该问题不属于范围外问题
  5. 检查是否重复已有安全通告(适用时请复用官方 GHSA)。
  6. 明确部署假设(环回/本地 vs 暴露,可信操作员 vs 不可信)。

60 秒加固基线

先使用此基线,再对受信代理按需开启工具:
{
  gateway: {
    mode: "local",
    bind: "loopback",
    auth: { mode: "token", token: "replace-with-long-random-token" },
  },
  session: {
    dmScope: "per-channel-peer",
  },
  tools: {
    profile: "messaging",
    deny: [
      "group:automation",
      "group:runtime",
      "group:fs",
      "sessions_spawn",
      "sessions_send",
    ],
    fs: { workspaceOnly: true },
    exec: { security: "deny", ask: "always" },
    elevated: { enabled: false },
  },
  channels: {
    whatsapp: {
      dmPolicy: "pairing",
      groups: { "*": { requireMention: true } },
    },
  },
}
此配置使网关仅本地可用,DM 隔离,并默认禁用控制平面/运行时工具。

共享收件箱快速规则

如果多人能与你的机器人私聊(DM):
  • 设置 session.dmScope: "per-channel-peer"(多账户频道用 "per-account-channel-peer")。
  • 保持 dmPolicy: "pairing" 或严格白名单。
  • 切勿将共享 DM 和广泛工具访问合用。
  • 这能加强合作/共享收件箱安全,但非设计成带用户主机/配置写权限共享的恶意共租隔离。

审计检查内容(高层)

  • 入站访问(DM 策略、群组策略、白名单):陌生人能触发机器人吗?
  • 工具影响范围(提升工具+开放频道):提示注入可能引发 shell/文件/网络操作吗?
  • 网络暴露(网关绑定/认证、Tailscale Serve/Funnel、弱/短令牌)。
  • 浏览器控制暴露(远程节点、中继端口、远程 CDP 端点)。
  • 本地磁盘安全(权限、符号链接、配置包含、“同步文件夹”路径)。
  • 插件(扩展无显式白名单仍存在)。
  • 策略漂移/配置错误(沙箱配置存在但未开启;gateway.nodes.denyCommands匹配精确命令名,不检查 shell 文本;危险的 allowCommands;全局 tools.profile="minimal" 被个别代理配置覆盖;允许在宽松策略下访问扩展插件工具)。
  • 运行时期望漂移(如 tools.exec.host="sandbox" 但沙箱未启,实际在主机执行)。
  • 模型健康度(当配置模型为旧版时发警告,不阻断)。
运行 --deep 时,OpenClaw 同时尝试对网关做在线探测。

凭据存储映射

审计访问或决定备份时参考:
  • WhatsApp~/.openclaw/credentials/whatsapp/<accountId>/creds.json
  • Telegram 机器人令牌:配置/环境变量或 channels.telegram.tokenFile
  • Discord 机器人令牌:配置/环境变量或 SecretRef(环境变量/文件/执行提供者)
  • Slack 令牌:配置/环境变量(channels.slack.*
  • 配对白名单
    • ~/.openclaw/credentials/<channel>-allowFrom.json(默认账户)
    • ~/.openclaw/credentials/<channel>-<accountId>-allowFrom.json(非默认账户)
  • 模型认证配置文件~/.openclaw/agents/<agentId>/agent/auth-profiles.json
  • 基于文件的秘密载荷(可选)~/.openclaw/secrets.json
  • 遗留 OAuth 导入~/.openclaw/credentials/oauth.json

安全审计清单

审计报告问题时,优先处理顺序:
  1. 任何“开放”+启用工具的情况:先锁定 DM/群组(配对/白名单),再紧缩工具策略/沙箱。
  2. 公开网络暴露(LAN 绑定、Funnel、认证缺失):立即修复。
  3. 浏览器控制远程暴露:视为操作员访问(仅限 tailnet,谨慎配对节点,避免公网暴露)。
  4. 权限:确保状态/配置/凭据/认证文件非组或全局可读。
  5. 插件/扩展:仅加载明确信任的。
  6. 模型选择:工具机器人请优先选用现代、强化训练的模型。

安全审计术语表

常见高警示 checkId 列表(不全):
checkId严重性重要原因主要修复键/路径自动修复
fs.state_dir.perms_world_writable严重其他用户/进程可修改整个 OpenClaw 状态~/.openclaw 文件系统权限
fs.config.perms_writable严重他人可更改认证/工具策略/配置~/.openclaw/openclaw.json 文件权限
fs.config.perms_world_readable严重配置可能暴露令牌/设置配置文件权限
gateway.bind_no_auth严重远程绑定无共享密钥gateway.bindgateway.auth.*
gateway.loopback_no_auth严重反向代理环回可能失去认证gateway.auth.*,代理设置
gateway.http.no_auth警告/严重auth.mode="none" 时 HTTP API 可访问gateway.auth.modegateway.http.endpoints.*
gateway.tools_invoke_http.dangerous_allow警告/严重HTTP API 重新启用危险工具gateway.tools.allow
gateway.nodes.allow_commands_dangerous警告/严重允许高影响节点命令(摄像头/屏幕/通讯录/日历/SMS)gateway.nodes.allowCommands
gateway.tailscale_funnel严重公开互联网暴露gateway.tailscale.mode
gateway.control_ui.allowed_origins_required严重非环回地址控制 UI 无显式浏览器来源白名单gateway.controlUi.allowedOrigins
gateway.control_ui.host_header_origin_fallback警告/严重启用 Host-header 来源回退(降低 DNS 重绑定防御)gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback
gateway.control_ui.insecure_auth警告启用不安全认证兼容开关gateway.controlUi.allowInsecureAuth
gateway.control_ui.device_auth_disabled严重禁用设备身份检查gateway.controlUi.dangerouslyDisableDeviceAuth
gateway.real_ip_fallback_enabled警告/严重信任 X-Real-IP 可能使代理误配置出现源 IP 欺骗gateway.allowRealIpFallbackgateway.trustedProxies
discovery.mdns_full_mode警告/严重mDNS 全模式向本地网络广播 cliPath/sshPort 信息discovery.mdns.modegateway.bind
config.insecure_or_dangerous_flags警告启用任何不安全/危险调试开关多个键(见详细信息)
hooks.token_too_short警告钩子入口令牌易暴力破解hooks.token
hooks.request_session_key_enabled警告/严重外部调用可自选 sessionKeyhooks.allowRequestSessionKey
hooks.request_session_key_prefixes_missing警告/严重外部 sessionKey 形态无限制hooks.allowedSessionKeyPrefixes
logging.redact_off警告敏感值泄露至日志/状态logging.redactSensitive
sandbox.docker_config_mode_off警告沙箱 Docker 配置存在但未启用agents.*.sandbox.mode
sandbox.dangerous_network_mode严重沙箱 Docker 使用 hostcontainer:* 网络模式agents.*.sandbox.docker.network
tools.exec.host_sandbox_no_sandbox_defaults警告未启沙箱时 exec host=sandbox 实际在主机执行tools.exec.hostagents.defaults.sandbox.mode
tools.exec.host_sandbox_no_sandbox_agents警告沙箱未启时,个别代理 exec host=sandbox 解析为主机执行agents.list[].tools.exec.hostagents.list[].sandbox.mode
tools.exec.safe_bins_interpreter_unprofiled警告safeBins 中无明确 profile 的解释器运行风险大tools.exec.safeBinstools.exec.safeBinProfilesagents.list[].tools.exec.*
skills.workspace.symlink_escape警告workspace skills/**/SKILL.md 解析出 workspace 外部workspace skills/** 文件系统状态
security.exposure.open_groups_with_elevated严重开放群组 + 提升工具造成高风险提示注入路径channels.*.groupPolicytools.elevated.*
security.exposure.open_groups_with_runtime_or_fs严重/警告开放群组可无沙箱/工作区限制访问命令/文件工具channels.*.groupPolicytools.profile/denytools.fs.workspaceOnlyagents.*.sandbox.mode
security.trust_model.multi_user_heuristic警告配置呈多用户状态但信任模型为个人助理分割信任边界,或基于共享用户加固(沙箱模式、工具拒/允许、工作区限定)
tools.profile_minimal_overridden警告代理覆盖绕过全局最小化配置agents.list[].tools.profile
plugins.tools_reachable_permissive_policy警告宽松策略下可访问扩展工具tools.profile + 工具允许/禁止
models.small_params严重/信息小模型 + 不安全工具导致注入风险模型选择 + 沙箱/工具策略

HTTP 上的控制界面

控制界面需要安全上下文(HTTPS 或 localhost)来生成设备身份。gateway.controlUi.allowInsecureAuth 跳过安全上下文、设备身份或设备配对检查。推荐使用 HTTPS(Tailscale Serve)或在 127.0.0.1 上打开 UI。 仅供紧急“破窗”情形,gateway.controlUi.dangerouslyDisableDeviceAuth 可完全禁用设备身份检查。这极大降低安全,除非调试且能快速回滚,否则务必关闭。 openclaw security audit 会在此设置开启时提示警告。

不安全或危险选项汇总

openclaw security audit 针对以下已知不安全/危险调试开关提示 config.insecure_or_dangerous_flags
  • gateway.controlUi.allowInsecureAuth=true
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true
  • gateway.controlUi.dangerouslyDisableDeviceAuth=true
  • hooks.gmail.allowUnsafeExternalContent=true
  • hooks.mappings[<index>].allowUnsafeExternalContent=true
  • tools.exec.applyPatch.workspaceOnly=false
OpenClaw 配置中定义的全部 dangerous* / dangerously* 配置键:
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback
  • gateway.controlUi.dangerouslyDisableDeviceAuth
  • browser.ssrfPolicy.dangerouslyAllowPrivateNetwork
  • channels.discord.dangerouslyAllowNameMatching
  • channels.discord.accounts.<accountId>.dangerouslyAllowNameMatching
  • channels.slack.dangerouslyAllowNameMatching
  • channels.slack.accounts.<accountId>.dangerouslyAllowNameMatching
  • channels.googlechat.dangerouslyAllowNameMatching
  • channels.googlechat.accounts.<accountId>.dangerouslyAllowNameMatching
  • channels.msteams.dangerouslyAllowNameMatching
  • channels.irc.dangerouslyAllowNameMatching(扩展频道)
  • channels.irc.accounts.<accountId>.dangerouslyAllowNameMatching(扩展频道)
  • channels.mattermost.dangerouslyAllowNameMatching(扩展频道)
  • channels.mattermost.accounts.<accountId>.dangerouslyAllowNameMatching(扩展频道)
  • agents.defaults.sandbox.docker.dangerouslyAllowReservedContainerTargets
  • agents.defaults.sandbox.docker.dangerouslyAllowExternalBindSources
  • agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin
  • agents.list[<index>].sandbox.docker.dangerouslyAllowReservedContainerTargets
  • agents.list[<index>].sandbox.docker.dangerouslyAllowExternalBindSources
  • agents.list[<index>].sandbox.docker.dangerouslyAllowContainerNamespaceJoin

反向代理配置

若网关部署于反向代理后(nginx、Caddy、Traefik 等),请配置 gateway.trustedProxies 以正确识别客户端 IP。 网关检测到来自非 trustedProxies 地址的代理头时,不会将连接视为本地客户端。若禁用网关认证,此类连接将被拒绝。此举防止身份验证绕过,避免代理连接被误判为本地主机并自动信任。
gateway:
  trustedProxies:
    - "127.0.0.1" # 若代理运行于本地
  # 可选,默认 false
  # 仅当代理无法提供 X-Forwarded-For 时启用
  allowRealIpFallback: false
  auth:
    mode: password
    password: ${OPENCLAW_GATEWAY_PASSWORD}
配置 trustedProxies 后,网关使用 X-Forwarded-For 确定客户端 IP。默认忽略 X-Real-IP,除非显式设置 gateway.allowRealIpFallback: true 良好反向代理行为(覆盖传入转发头):
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
不良代理行为(附加/保留不可信转发头):
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

HSTS 与来源说明

  • OpenClaw 网关优先考虑本地/环回接口。若 TLS 终止于反向代理,请在代理层设置 HSTS。
  • 若网关自身终止 HTTPS,可在响应中通过 gateway.http.securityHeaders.strictTransportSecurity 设置 HSTS 头。
  • 部署详情见 Trusted Proxy Auth
  • 非环回控制界面部署默认需 gateway.controlUi.allowedOrigins
  • gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true 启用 Host-header 来源回退,属危险操作员选项。
  • 将 DNS 重绑定和代理主机头行为视作部署加固问题;保持 trustedProxies 精准,切勿直接暴露网关至公网。

本地会话日志存储

OpenClaw 会话转录存储于磁盘,位置为 ~/.openclaw/agents/<agentId>/sessions/*.jsonl 该机制支持会话连续性及(可选)会话记忆索引,但任何拥有文件系统访问权限的进程/用户都可读取这些日志。以磁盘访问视为信任边界,必须锁紧 ~/.openclaw 的权限(详见审计章节)。若需更强隔离,请为代理部署独立操作系统用户或主机。

节点执行(system.run)

配对 macOS 节点后,网关可在该节点调用 system.run。这即为 macOS 的远程代码执行:
  • 需节点配对(批准 + 令牌)。
  • 节点端控制路径:设置 → 执行批准(安全策略 + 询问 + 白名单)。
  • 如不想远程执行,请设为 deny 并移除该 Mac 的节点配对。

动态技能(守护/远程节点)

OpenClaw 可在会话中途刷新技能列表:
  • 技能守护SKILL.md 的更改会在下一轮代理转变时更新技能快照。
  • 远程节点:连接 macOS 节点使 macOS 独有技能生效(基于二进制检测)。
将技能文件夹视为可信代码,限制修改权限。

威胁模型

你的 AI 助手可:
  • 执行任意 shell 命令
  • 读写文件
  • 访问网络服务
  • 向任何人发送消息(若赋予 WhatsApp 访问)
向你发消息的人可:
  • 试图诱使 AI 做不良操作
  • 进行社工以获取数据访问
  • 探查基础设施细节

核心概念:智能前的访问控制

多数失败非复杂漏洞 —— 是“有人发消息,机器人照做”。 OpenClaw 立场:
  • 身份优先: 决定谁能跟机器人对话(DM 配对/白名单/公开)。
  • 范围其次: 决定机器人可行动范围(群组白名单 + 提及触发、工具、沙箱、设备权限)。
  • 模型最后: 假设模型会被操控,设计时限制操控的影响范围。

命令授权模型

斜杠命令与指令仅针对授权发送者生效。授权依据频道白名单/配对及 commands.useAccessGroups(参见配置斜杠命令)。若渠道白名单为空或包含 "*",该频道的命令即开放。 /exec 仅是授权操作员的会话便捷命令,不写配置,也不改动其他会话。

控制平面工具风险

两个内建工具可做持久控制平面变更:
  • gateway 可调用 config.applyconfig.patchupdate.run
  • cron 可创建持续运行计划任务。
对任何处理不可信内容的代理/界面,默认禁止这些:
{
  tools: {
    deny: ["gateway", "cron", "sessions_spawn", "sessions_send"],
  },
}
commands.restart=false 仅禁止重启动作,不禁用 gateway 配置/更新操作。

插件/扩展

插件与网关进程内运行。视为可信代码:
  • 仅安装你信任的插件来源。
  • 优先使用显式定义的 plugins.allow 白名单。
  • 启用前审查插件配置。
  • 插件更改后重启网关。
  • 通过 npm (openclaw plugins install <npm-spec>) 安装插件时,视为运行不可信代码:
    • 安装目录为 ~/.openclaw/extensions/<pluginId>/(或 $OPENCLAW_STATE_DIR/extensions/<pluginId>/)。
    • OpenClaw 用 npm pack,再在该目录执行 npm install --omit=dev(安装时可执行生命周期脚本)。
    • 优先选择固定版本(@scope/pkg@1.2.3)并手动检查解包后的代码。
详见:插件

DM 访问模型(配对 / 白名单 / 公开 / 禁用)

所有支持 DM 的当前渠道都支持 DM 策略(dmPolicy*.dm.policy),在消息处理前限定入站 DM:
  • pairing(默认):未知发送者收到短配对码,机器人忽略其消息直到批准。码 1 小时后过期;重复 DM 仅在有新请求时重新发送。默认每频道挂起请求最多 3 个
  • allowlist:阻止未知发送者(无配对握手)。
  • open:允许任何人 DM(公开)。频道白名单含 "*"(明确选择公开)。
  • disabled:完全忽略入站 DM。
CLI 批准流程:
openclaw pairing list <channel>
openclaw pairing approve <channel> <code>
详情及磁盘文件见:配对

DM 会话隔离(多用户模式)

默认,OpenClaw 将所有 DM 路由至主会话,确保助手在设备及频道间连续性。若多人可 DM 机器人(公开 DM 或多用户白名单),建议隔离 DM 会话:
{
  session: { dmScope: "per-channel-peer" },
}
防止跨用户上下文泄露,群聊也将被隔离。 此为消息上下文边界,非主机管理员边界。用户相互敌意且共享同一网关主机/配置时,请为每信任边界运行独立网关。

安全 DM 模式(推荐)

视上例为安全 DM 模式
  • 默认:session.dmScope: "main"(所有 DM 共享一个会话,保证连续性)。
  • 本地 CLI 初用默认:写入 session.dmScope: "per-channel-peer"(保留已有显式配置)。
  • 安全 DM 模式:session.dmScope: "per-channel-peer"(每频道+发送者对获得独立 DM 上下文)。
同频道多账户使用时,选用 per-account-channel-peer。同一人跨多频道通讯时,用 session.identityLinks 合并为统一身份。详见会话管理配置

白名单(DM+群组)— 术语说明

OpenClaw 有两层“谁能触发我?”控制:
  • DM 白名单allowFrom / channels.discord.allowFrom / channels.slack.allowFrom;旧版:channels.discord.dm.allowFromchannels.slack.dm.allowFrom):谁可在私聊中对话机器人。
    • dmPolicy="pairing" 时,审批写入账户范围配对白名单存储(~/.openclaw/credentials/ 下,默认账户为 <channel>-allowFrom.json,非默认账户为 <channel>-<accountId>-allowFrom.json),与配置白名单合并。
  • 群组白名单(频道特定):机器人来自哪些群组/频道/公会消息被接受。
    • 常用模式:
      • channels.whatsapp.groupschannels.telegram.groupschannels.imessage.groups:每群组默认如 requireMention,设置时也做群组白名单(包含 "*" 保留允许所有)。
      • groupPolicy="allowlist" + groupAllowFrom:限制群组内哪些人可触发机器人(支持 WhatsApp/Telegram/Signal/iMessage/Microsoft Teams)。
      • channels.discord.guilds / channels.slack.channels:渠道特定白名单及提及默认。
    • 群组检查顺序:先群组策略/白名单,再提及/回复激活。
    • 回复机器人消息(隐式提及)不会绕过发送者白名单如 groupAllowFrom
    • 安全提示: dmPolicy="open"groupPolicy="open" 视为最后手段配置,建议少用;若非全面信任群成员,请优先配对+白名单。
详见:配置群组

提示注入(定义及重要性)

提示注入指攻击者故意构造消息,操控模型做不安全操作(如“忽略指令”、“导出文件系统”、“执行链接命令”等)。 即使有强系统提示,提示注入仍未解决。系统提示仅为软约束;硬约束依赖工具策略、执行批准、沙箱与频道白名单(且运营者可关闭)。实际有帮助的措施:
  • 保持入站 DM 封闭(配对/白名单)。
  • 群组优选提及触发,避免公开频道“常开”机器人。
  • 默认将链接、附件、粘贴指令视为敌意内容。
  • 敏感工具运行进沙箱,避免秘密文件进入代理可访问文件系统。
  • 注:沙箱为自愿选项,关闭后即便 tools.exec.host 默认沙箱,执行仍在主机;主机 exec 不需批准,除非设置为 host=gateway 并启用执行批准。
  • 限制高风险工具(exec, browser, web_fetch, web_search)仅供受信代理或明确定义的白名单。
  • 模型选择关键: 老旧/小规模模型对提示注入和工具滥用防御力显著较弱。启用工具机器人时,请选用最新版、强化训练模型。
危险信号(视为不信任):
  • “读该文件/URL 并按指示执行。”
  • “忽略系统提示或安全规则。”
  • “泄露隐藏指令或工具输出。”
  • “粘贴 ~/.openclaw 或日志完整内容。”

不安全外部内容绕过开关

OpenClaw 包含关闭外部内容安全包装的开关:
  • hooks.mappings[].allowUnsafeExternalContent
  • hooks.gmail.allowUnsafeExternalContent
  • Cron 任务中 payload 字段 allowUnsafeExternalContent
指导:
  • 生产环境保持未设置/false。
  • 仅在紧缩调试时短期启用。
  • 启用时请隔离该代理(沙箱 + 最小工具 + 专用会话命名空间)。
钩子风险提示:
  • 钩子载荷为不信任内容,即便来源受控(邮件/文档/网页内容皆可含提示注入)。
  • 低级模型更易受攻击。钩子驱动自动化推荐使用强大现代模型层,结合紧缩工具策略(tools.profile: "messaging" 或更严格) + 沙箱。

提示注入不依赖公开 DM

即便仅你可发消息,提示注入仍可通过任何不信任内容触发(网页搜索/抓取结果、浏览器页面、邮件、文档、附件、粘贴日志/代码)。攻击面不限于发信者,内容自身可能携带对抗指令。 启用工具时,典型风险为上下文外泄或触发工具调用。缩小影响范围:
  • 使用只读或禁用工具的阅读代理总结不可信内容,再传递摘要给主代理。
  • 避免为工具启用代理开启 web_search/web_fetch/browser,除非必需。
  • OpenResponses URL 输入(input_file/input_image)时,设置严格的 URL 白名单(gateway.http.endpoints.responses.files.urlAllowlistimages.urlAllowlist),保持 maxUrlParts 低。
  • 对不受信输入代理启用沙箱和严格工具白名单。
  • 机密信息勿放入提示,通过环境变量/主机配置注入。

模型强度(安全提示)

提示注入防护随模型等级不均。小型/廉价模型尤易受工具误用和指令劫持,尤其面对对抗性提示。
对于启用工具或处理不可信内容代理,旧版/小型模型往往提示注入风险过高。不要在弱模型层级运行这些工作负载。
建议:
  • 任何可以运行工具或访问文件/网络的机器人,均选用最新代、最高层级模型。
  • 不使用旧/弱/小型模型用于启用工具代理或不可信收件箱;注入风险过大。
  • 必用小模型时,缩小影响范围(只读工具、强沙箱、最小文件系统访问、严格白名单)。
  • 运行小模型时,所有会话启用沙箱并禁用 web_search/web_fetch/browser,除非输入严格控制。
  • 对于仅信任输入且无工具个人助理,使用小模型通常可接受。

群组中的推理与详细输出

/reasoning/verbose 可暴露内部推理或工具输出,非公开频道建议作为调试命令禁用。 建议:
  • 公共房间禁用 /reasoning/verbose
  • 若启用,仅限受信任 DM 或严格管理房间。
  • 注意:详尽输出可能包括工具参数、URL 与模型见过的数据。

配置加固示例

0) 文件权限

保持网关主机上的配置和状态私密:
  • ~/.openclaw/openclaw.json:权限 600(用户读写)
  • ~/.openclaw 文件夹权限 700(仅用户)
openclaw doctor 可提示并协助加固。

0.4) 网络暴露(绑定+端口+防火墙)

网关在单端口复用WebSocket + HTTP
  • 默认:18789
  • 配置/标志/环境变量:gateway.port--portOPENCLAW_GATEWAY_PORT
HTTP 面向控制界面及 canvas:
  • 控制 UI(SPA 资源)默认基路径 /
  • Canvas 主机路径:/__openclaw__/canvas/ & /__openclaw__/a2ui/(任意 HTML/JS,应视为不信任内容)
使用浏览器打开 canvas 内容须谨慎:
  • 不暴露 canvas 主机给不信任网络/用户。
  • 切勿使 canvas 内容与特权网页共享同一源,除非充分理解影响。
绑定模式控制网关监听范围:
  • gateway.bind: "loopback"(默认):仅允许本地连接。
  • 非环回绑定("lan""tailnet""custom")扩大攻击面。仅在有共享令牌/密码及防火墙情况下使用。
经验法则:
  • 优先使用 Tailscale Serve 替代 LAN 绑定(Serve 保持网关环回,Tailscale 管理访问)。
  • 必须 LAN 绑定时,防火墙限制端口访问至精确源 IP 白名单;勿广泛端口转发。
  • 绝不在 0.0.0.0 上无认证公开网关。

0.4.1) Docker 端口映射 + UFW(DOCKER-USER

在 VPS 上使用 Docker 时,容器端口映射(-p HOST:CONTAINERports:)通过 Docker 转发链而非仅 Host 的 INPUT 规则。 为令防火墙策略在 Docker 与主机间一致,应在 DOCKER-USER 链设置规则(此链在 Docker 自身接受规则前生效)。现代发行版使用 iptables-nft,规则同应用于 nftables 后端。 IPv4 最简白名单示例:
# /etc/ufw/after.rules (添加独立 *filter 部分)
*filter
:DOCKER-USER - [0:0]
-A DOCKER-USER -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN
-A DOCKER-USER -s 127.0.0.0/8 -j RETURN
-A DOCKER-USER -s 10.0.0.0/8 -j RETURN
-A DOCKER-USER -s 172.16.0.0/12 -j RETURN
-A DOCKER-USER -s 192.168.0.0/16 -j RETURN
-A DOCKER-USER -s 100.64.0.0/10 -j RETURN
-A DOCKER-USER -p tcp --dport 80 -j RETURN
-A DOCKER-USER -p tcp --dport 443 -j RETURN
-A DOCKER-USER -m conntrack --ctstate NEW -j DROP
-A DOCKER-USER -j RETURN
COMMIT
IPv6 有单独规则,Docker IPv6 启用时相应编辑 /etc/ufw/after6.rules 避免示例中写死接口名(如 eth0),因各 VPS 镜像接口名不同(如 ens3enp*),免漏掉拒绝规则。 重载后简单验证:
ufw reload
iptables -S DOCKER-USER
ip6tables -S DOCKER-USER
nmap -sT -p 1-65535 <公网 IP> --open
外网应仅开放预期端口(常见 SSH + 反向代理端口)。

0.4.2) mDNS/Bonjour 发现(信息泄露)

网关通过 mDNS(_openclaw-gw._tcp,端口 5353)广播本机设备发现。全模式会公开 TXT 记录中的运行信息:
  • cliPath:CLI 二进制完整路径(泄漏用户名和安装位置)
  • sshPort:SSH 可用端口
  • displayNamelanHost:主机名信息
运营安全考虑: 广播基础设施详情加剧本地网络侦察。即使是“无害”的路径和 SSH 可用信息,都方便攻击者绘制环境拓扑。 建议:
  1. 最小模式(默认,推荐对外网关):mDNS 广播不含敏感字段:
    {
      discovery: {
        mdns: { mode: "minimal" },
      },
    }
    
  2. 完全关闭(无需求时):
    {
      discovery: {
        mdns: { mode: "off" },
      },
    }
    
  3. 全模式(自愿):包含 cliPath + sshPort
    {
      discovery: {
        mdns: { mode: "full" },
      },
    }
    
  4. 环境变量方式(替代配置):设置 OPENCLAW_DISABLE_BONJOUR=1 禁用 mDNS。
最小模式下仍广播用于设备发现所需信息(rolegatewayPorttransport),需要 CLI 路径时可通过认证 WebSocket 获取。

0.5) 锁定网关 WebSocket(本地认证)

网关认证默认开启。若无令牌/密码,拒绝 WebSocket 连接(失败关闭)。 引导向导默认生成令牌(即使环回),要求本地客户端认证。 设置令牌,确保所有 WebSocket 客户端需认证:
{
  gateway: {
    auth: { mode: "token", token: "your-token" },
  },
}
医生命令可生成令牌:openclaw doctor --generate-gateway-token 注意:gateway.remote.token / .password 为客户端凭据来源,不直接保护本地 WS 访问。未设置 gateway.auth.* 时,局部调用可后备使用 gateway.remote.*。客户端若使用非加密 ws:// 默认环回,仅限受信网络可用;私网不可信路径可在客户端进程设 OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1 作为紧急解锁。 本地设备配对:
  • 本地连接(环回或网关主机自身 tailnet 地址),自动批准配对,确保同机客户体验流畅。
  • 其他 tailnet 节点视作本地,依然需配对批准。
认证模式:
  • gateway.auth.mode: "token":共享承载令牌(大多数情况推荐)。
  • gateway.auth.mode: "password":口令认证(推荐通过环境变量 OPENCLAW_GATEWAY_PASSWORD 设定)。
  • gateway.auth.mode: "trusted-proxy":信任身份感知反向代理进行认证,代理通过头传递身份(参考Trusted Proxy Auth)。
令牌/密码轮换核查:
  1. 生成/设置新密钥(gateway.auth.tokenOPENCLAW_GATEWAY_PASSWORD)。
  2. 重启网关(或由 macOS app 守护时重启应用)。
  3. 更新所有远程客户端(gateway.remote.token / .password)。
  4. 验证旧凭据已不可用。

0.6) Tailscale Serve 身份头

gateway.auth.allowTailscaletrue(Serve 默认),OpenClaw 接受 Tailscale Serve 身份头(tailscale-user-login)用于控制面 UI/WebSocket 身份认证。通过本地 Tailscale 守护(tailscale whois)解析 x-forwarded-for 地址,校验该头。仅对环回接口且带有 x-forwarded-forx-forwarded-protox-forwarded-host 请求生效。HTTP API(如 /v1/*/tools/invoke/api/channels/*)仍需令牌/密码。 重要边界:
  • 网关 HTTP 承载令牌认证即全权限控制访问。
  • 授予调用 /v1/chat/completions/v1/responses/tools/invoke/api/channels/* 的凭据相当于该网关全访问操作员密钥。
  • 勿将此凭据泄露给不可信调用者,建议按信任边界分别部署网关。
信任假设: 无令牌的 Serve 认证假定网关主机可信。不可将其视作敌对本地主机进程的防护,将本地主机运行不可信代码时禁用此选项,强制令牌/密码认证。 安全提示: 反向代理前端勿转发此头。若代理终止 TLS,请禁用 gateway.auth.allowTailscale,改用令牌/密码认证或Trusted Proxy Auth 可信代理:
  • 若代理终止 TLS,配置 gateway.trustedProxies 为代理 IP。
  • OpenClaw 仅从可信代理 IP 信任 x-forwarded-for(及 x-real-ip)辨识客户端 IP,用于本地配对校验及认证。
  • 确保代理覆盖 x-forwarded-for 并阻断直连网关端口。
详情参见 TailscaleWeb 概览

0.6.1) 通过节点主机控制浏览器(推荐)

网关若远程,浏览器在别处运行,建议在浏览器主机运行节点主机,让网关代理浏览器操作(见浏览器工具)。 视节点配对如管理员访问。 推荐做法:
  • 让网关和节点主机处于同一 tailnet。
  • 故意配对节点;不需要时禁用浏览器代理路由。
避免:
  • 公开中继/控制端口至 LAN 或互联网。
  • 使用 Tailscale Funnel 公开浏览器控制端点。

0.7) 磁盘中的秘密(敏感信息)

假设 ~/.openclaw/(或 $OPENCLAW_STATE_DIR/)内所有内容均含敏感或私人数据:
  • openclaw.json:配置含令牌(网关、远程网关)、提供者设置和白名单。
  • credentials/**:频道凭据(如 WhatsApp)、配对白名单、旧 OAuth 导入。
  • agents/<agentId>/agent/auth-profiles.json:API 密钥、令牌配置、OAuth 令牌、可选 keyRef/tokenRef
  • secrets.json(可选):基于文件的秘密有效载荷,供 file SecretRef 提供者使用。
  • agents/<agentId>/agent/auth.json:遗留兼容文件。若发现静态 api_key,自动清理。
  • agents/<agentId>/sessions/**:会话转录(*.jsonl)及路由元数据(sessions.json),含私人消息和工具输出。
  • extensions/**:已安装插件及其 node_modules/
  • sandboxes/**:工具沙箱工作区,可能包含你读写文件的副本。
加固建议:
  • 维持紧权限(目录 700,文件 600)。
  • 使用全磁盘加密。
  • 若主机多人共享,优先为网关使用专用操作系统用户。

0.8) 日志与转录(脱敏与保留)

日志与转录可能泄露敏感信息,纵使访问控制无误:
  • 网关日志含工具摘要、错误与 URL。
  • 会话转录含粘贴密钥、文件内容、命令输出和链接。
建议:
  • 保持工具摘要脱敏开启(logging.redactSensitive: "tools",默认)。
  • 根据环境添加自定义脱敏模式(logging.redactPatterns,如令牌、主机名)。
  • 分享诊断信息时,优选使用 openclaw status --all(可粘贴,隐藏秘密)代替原始日志。
  • 若无长周期需求,清理旧会话转录与日志。
详见:日志

1) 私聊默认配对

{
  channels: { whatsapp: { dmPolicy: "pairing" } },
}

2) 群组全场需提及

{
  "channels": {
    "whatsapp": {
      "groups": {
        "*": { "requireMention": true }
      }
    }
  },
  "agents": {
    "list": [
      {
        "id": "main",
        "groupChat": { "mentionPatterns": ["@openclaw", "@mybot"] }
      }
    ]
  }
}
群组聊天仅在显式提及时响应。

3) 分开号码

考虑为 AI 运行单独的电话号码:
  • 个人号:保留私人对话
  • 机器人号:AI 处理业务,有适当边界

4) 只读模式(目前通过沙箱+工具)

可组合实现只读配置:
  • agents.defaults.sandbox.workspaceAccess: "ro"(或 "none" 禁止工作区访问)
  • 阻止 writeeditapply_patchexecprocess 等工具的允许/拒绝列表。
未来可能增设单一 readOnlyMode 标识简化。 附加加固:
  • 默认 tools.exec.applyPatch.workspaceOnly: true:确保 apply_patch 不写工作区外文件,即便不启沙箱。如需覆盖设为 false
  • 可选启用 tools.fs.workspaceOnly: true:限制文件路径和图片自动加载至工作区(适合允许绝对路径时做单一防线)。
  • 限制文件系统根路径范围,避免工作区路径过广(如家目录),防止敏感文件暴露给工具。

5) 安全基线配置示例(快速复制)

保持网关私密,启用 DM 配对,禁用群组“常开”机器人:
{
  gateway: {
    mode: "local",
    bind: "loopback",
    port: 18789,
    auth: { mode: "token", token: "your-long-random-token" },
  },
  channels: {
    whatsapp: {
      dmPolicy: "pairing",
      groups: { "*": { requireMention: true } },
    },
  },
}
需更安全工具执行可加沙箱并拒绝危险工具(见“按代理访问配置”示例)。 默认聊天驱动代理轮转时,非拥有者无法使用 crongateway 工具。

沙箱(推荐)

专门文档:沙箱 两种互补方式:
  • 整网关运行 Docker(容器边界):Docker
  • 工具沙箱agents.defaults.sandbox,主机网关 + Docker 隔离工具):沙箱
注意:避免代理间权限泄漏,agents.defaults.sandbox.scope 保持 "agent"(默认)或 "session"(更严格的会话隔离)。scope: "shared" 使用单容器/工作区。 还可配置代理对工作区访问控制:
  • agents.defaults.sandbox.workspaceAccess: "none"(默认):工作区不可访问;工具运行于 ~/.openclaw/sandboxes 内沙箱工作区。
  • agents.defaults.sandbox.workspaceAccess: "ro":工作区只读挂载至 /agent(禁止写/编辑/补丁)。
  • agents.defaults.sandbox.workspaceAccess: "rw":工作区读写挂载。
重要提示:tools.elevated 为主全局逃逸通道,在主机上运行 exec。务必保持 tools.elevated.allowFrom 严格,勿允许陌生人使用。可对代理分别限制 tools.elevated 访问,详见提升模式

子代理委托防护

允许会话工具时,视子代理调用为额外边界选择:
  • 除非必要,拒绝 sessions_spawn
  • 限制 agents.list[].subagents.allowAgents 至安全目标代理。
  • 必须沙箱流程时,调用子代理时加参数 sandbox: "require"(默认继承)。
  • sandbox: "require" 于目标非沙箱时立即失败。

浏览器控制风险

启用浏览器控制后,模型能驱动真实浏览器。浏览器用户配置文件若含登录信息,模型可访问账户及数据。请将浏览器配置视为敏感状态
  • 优先为代理使用专用配置(默认 openclaw 配置)。
  • 避免指向个人日常使用配置。
  • 沙箱代理默认禁用主机浏览器控制,除非信任。
  • 浏览器下载视为不可信数据,建议使用隔离下载目录。
  • 若可能,禁用浏览器同步/密码管理器(降低影响范围)。
  • 远程网关环境下,浏览器控制等同于对该配置文件数据的操作员访问权限。
  • 保证网关与节点均为尾网内,仅内部访问控制端口。
  • Chrome 扩展中继的 CDP 端点受认证保护,仅允许 OpenClaw 客户端连接。
  • 不使用时禁用浏览器代理路由(gateway.nodes.browser.mode="off")。
  • Chrome 扩展中继模式非更安全,可接管现有标签,等同代理浏览器权限。

浏览器 SSRF 策略(默认信任网络)

OpenClaw 浏览器网络策略默认为信任操作员模型:默认允许访问私有/内部地址,除非显式禁用。
  • 默认:browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: true(未设时隐式)。
  • 旧别名:browser.ssrfPolicy.allowPrivateNetwork 保持兼容。
  • 严格模式:设为 false 阻断私有/内部/特殊网络地址。
  • 严格模式下,使用 hostnameAllowlist(如 *.example.com 模式)和 allowedHostnames(含 localhost 等精确例外)明显允许。
  • 导航前与最终 http(s) URL 都会尽力检查,减少重定向绕过。
示例严格配置:
{
  browser: {
    ssrfPolicy: {
      dangerouslyAllowPrivateNetwork: false,
      hostnameAllowlist: ["*.example.com", "example.com"],
      allowedHostnames: ["localhost"],
    },
  },
}

按代理访问配置(多代理)

多代理路由环境下,每个代理可有独立沙箱和工具策略,可赋予完全访问只读无访问。详见多代理沙箱与工具及优先级规则。 常用场景:
  • 个人代理:完全访问,关闭沙箱
  • 家庭/工作代理:沙箱 + 只读工具
  • 公众代理:沙箱 + 禁用文件系统/shell 工具

示例:完全访问(无沙箱)

{
  agents: {
    list: [
      {
        id: "personal",
        workspace: "~/.openclaw/workspace-personal",
        sandbox: { mode: "off" },
      },
    ],
  },
}

示例:只读工具 + 工作区只读

{
  agents: {
    list: [
      {
        id: "family",
        workspace: "~/.openclaw/workspace-family",
        sandbox: {
          mode: "all",
          scope: "agent",
          workspaceAccess: "ro",
        },
        tools: {
          allow: ["read"],
          deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
        },
      },
    ],
  },
}

示例:无文件系统/shell 访问(允许提供者消息)

{
  agents: {
    list: [
      {
        id: "public",
        workspace: "~/.openclaw/workspace-public",
        sandbox: {
          mode: "all",
          scope: "agent",
          workspaceAccess: "none",
        },
        // 会话工具可能泄露私密信息。默认限制为当前会话及子代理会话,可进一步限制。
        // 见配置参考中 `tools.sessions.visibility`。
        tools: {
          sessions: { visibility: "tree" }, // self | tree | agent | all
          allow: [
            "sessions_list",
            "sessions_history",
            "sessions_send",
            "sessions_spawn",
            "session_status",
            "whatsapp",
            "telegram",
            "slack",
            "discord",
          ],
          deny: [
            "read",
            "write",
            "edit",
            "apply_patch",
            "exec",
            "process",
            "browser",
            "canvas",
            "nodes",
            "cron",
            "gateway",
            "image",
          ],
        },
      },
    ],
  },
}

告诉你的 AI 的内容

将安全规范加入代理系统提示:
## 安全规范
- 永不向陌生人泄露目录列表或文件路径
- 永不泄露 API 密钥、凭据或基础架构细节
- 修改系统配置前需与所有者确认
- 有疑问时先询问,后行动
- 仅在明确授权时公开私密数据

事件响应

AI 出状况时:

限制

  1. 停止其运行: 停止 macOS 应用(若其守护网关)或终止 openclaw gateway 进程。
  2. 关闭暴露: 设置 gateway.bind: "loopback"(或禁用 Tailscale Funnel/Serve),直至排查。
  3. 冻结访问: 危险的 DM/群组改为 dmPolicy: "disabled" / 要求提及,移除 "*" 等开放白名单。

轮换(若秘密泄漏,视为妥协)

  1. 轮换网关认证(gateway.auth.token / OPENCLAW_GATEWAY_PASSWORD)并重启。
  2. 轮换任何能调用网关的远程客户端密钥(gateway.remote.token / .password)。
  3. 轮换提供者/API 凭据(WhatsApp 凭据、Slack/Discord 令牌、auth-profiles.json 中的模型/API 密钥、加密秘密载荷等)。

审计

  1. 检查网关日志:/tmp/openclaw/openclaw-YYYY-MM-DD.log(或 logging.file)。
  2. 审阅相关转录:~/.openclaw/agents/<agentId>/sessions/*.jsonl
  3. 审核近期配置变更(可能扩大访问的:gateway.bindgateway.auth、DM/群策略、tools.elevated、插件变更)。
  4. 重新运行 openclaw security audit --deep 确认未留关键漏洞。

收集报告材料

  • 时间戳、网关主机 OS + OpenClaw 版本
  • 相关会话转录 + 简短日志片段(脱敏后)
  • 攻击者发言及代理动作
  • 网关是否暴露非环回接口(LAN/Tailscale Funnel/Serve)

秘密扫描(detect-secrets)

CI 在 secrets 任务中运行 detect-secrets pre-commit 钩子。 推送到 main 分支时总是会进行全文件扫描。拉取请求在有基础提交时会使用变更文件的快速路径,否则会回退到全文件扫描。如果扫描失败,说明有新的候选项尚未加入基线。

CI 失败时

  1. 本地复现:
    pre-commit run --all-files detect-secrets
    
  2. 了解这些工具:
    • 在 pre-commit 中,detect-secrets 会使用仓库的基线和排除项运行 detect-secrets-hook
    • detect-secrets audit 会打开一个交互式审查界面,用于将每个基线项标记为真实或误报。
  3. 对于真正的秘密:轮换/删除它们,然后重新运行扫描以更新基线。
  4. 对于误报:运行交互式审核并将它们标记为误报:
    detect-secrets audit .secrets.baseline
    
  5. 若需新增排除规则,编辑 .detect-secrets.cfg 并配合 --exclude-files / --exclude-lines 重新生成 baseline(配置文件仅参考,detect-secrets 不自动读取)。
更新后的 .secrets.baseline 推送至仓库。

报告安全问题

发现 OpenClaw 漏洞?请负责任报告:
  1. 邮件:security@openclaw.ai
  2. 修复前勿公开发布
  3. 我们会感谢你(除非你选择匿名)