尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

如何在 Claude Code 安装 security-guidance 钩子拦截不安全代码写法并在需要时临时禁用

如何在 Claude Code 安装 security-guidance 钩子拦截不安全代码写法并在需要时临时禁用 如何在 Claude Code 安装 security-guidance 钩子拦截不安全代码写法并在需要时临时禁用【免费下载链接】claude-skills380 Claude Code skills agent skills plugins (30 Agents, 70 custom commands, 380 skills, customizable references, scripts)for Claude Code, Codex, Gemini CLI, Cursor, and 8 more coding agents — engineering, marketing, product, compliance, C-level advisory, research, business operations, commercial finance, and your daily productivity skills.项目地址: https://gitcode.com/GitHub_Trending/cla/claude-skills在 Claude Code 会话中让 Agent 修改代码时eval(、os.system、pickle、f-string 拼接 SQL 这类写法可能在编辑落盘前就构成注入或反序列化风险。claude-skills 仓库里的security-guidance插件提供一个 PreToolUse 钩子在Edit、Write、MultiEdit三个工具实际执行之前扫描目标文件路径与写入内容命中已知反模式时向 stderr 输出警告并以退出码 2 阻断这次工具调用。安装后无需额外配置即可自动生效当你确实在执行已验证安全的操作比如写一个故意不安全的沙箱 REPL 或做安全研究时可以用环境变量ENABLE_SECURITY_REMINDER0在单个会话内临时绕过钩子。本文覆盖安装插件、验证拦截是否生效、临时禁用、以及状态文件与调试日志的位置。安装前需要满足的条件使用 Claude Code 的插件体系/plugin命令可用钩子通过插件自带的hooks.json接线安装后自动运行系统上有python3。钩子实际执行的命令是python3 ${CLAUDE_PLUGIN_ROOT}/hooks/security_reminder_hook.py见 hooks.json脚本本身只依赖标准库、无第三方包SKILL.md 注明 Stdlib only — no dependencies。安装 security-guidance 插件在 Claude Code 中依次执行命令原文来自 SKILL.md 的 Installation 一节# In Claude Code: /plugin marketplace add alirezarezvani/claude-skills /plugin install security-guidanceclaude-code-skills第一行添加插件市场第二行安装security-guidance这个独立插件。文档明确说明安装完成后no further configuration needed — the hook runs automatically。生成的文档页 docs/skills/engineering/security-guidance.md 顶部给出的安装入口是claude /plugin install engineering-advanced-skills即通过engineering-advanced-skills领域包一并装入两条路径都出现在仓库文档中按需选择其一即可。钩子如何拦截触发时机与退出码钩子的接线配置在 hooks.jsonPreToolUse事件的 matcher 为Edit|Write|MultiEdit只有这三个文件编辑工具会触发钩子。工作流引自 SKILL.md 的 How It WorksClaude Code 即将执行Edit/Write/MultiEditPreToolUse 钩子触发把工具输入以 JSON 形式通过 stdin 传给security_reminder_hook.py钩子提取file_path与写入内容对照 12 条规则做子串/路径匹配命中且本会话内该文件规则尚未警告过向 stderr 打印警告Claude 可见、退出码 2 阻断工具调用并把警告键写入~/.claude/security_warnings_state_session.json命中但本会话已警告过放行退出码 0未命中放行退出码 0。PreToolUse 钩子的三个退出码语义见 pretooluse_hook_canon.md0放行1钩子自身出错放行并记日志2阻断工具调用。拦截范围覆盖 12 条规则基于路径的一条.github/workflows/下的.yml/.yaml文件提示工作流命令注入风险加 11 条子串规则包括child_process.exec、new Function、eval(、dangerouslySetInnerHTML、document.write、.innerHTML 、pickle、os.system、shellTrue、f-string/.format拼 SQL、yaml.unsafe_load。完整规则与警告文案在 security_reminder_hook.py 的SECURITY_PATTERNS中可直接核对。注意会话级缓存机制同一会话内同一文件命中同一规则只阻断一次后续编辑放行这是设计意图防止重复警告消耗 token、也避免用户学会无视警告。不同规则在同一文件上各自独立触发。验证钩子是否生效文档给出的可核对依据有两处拦截行为本身让会话执行一次包含已知模式的写入例如在某个测试文件中写入含eval(的内容或编辑.github/workflows/下的 workflow 文件。按文档行为第一次命中时这次Edit/Write会被阻断Claude 会看到 stderr 上的安全警告。若警告已被本会话显示过状态文件里已有该键同一文件同一规则的后续编辑会直接放行——这是预期行为不是钩子失效。状态文件警告键会以file_path-rule_name的形式保存为 JSON 列表位置是~/.claude/security_warnings_state_session_id.json每个会话一个文件。可用通配符查看当前用户下所有会话的状态文件ls ~/.claude/security_warnings_state_*.jsonsession_id由 Claude 会话生成对应你当前会话的那个文件里应能看到刚才命中的键。状态文件的作用范围是单个会话钩子每次运行有 10% 概率清理超过 30 天的旧状态文件因此文件会周期性减少。调试日志钩子的解码失败、状态文件保存失败等运行问题写入~/.claude/security-warnings-log.txt排查误触发时用文档给出的方式跟踪tail -f ~/.claude/security-warnings-log.txt需要放行时的临时禁用文档给出的临时禁用方式是会话级环境变量SKILL.md Configuration 一节ENABLE_SECURITY_REMINDER0 claude # Hook is bypassed for this session脚本在入口处检查该变量值为0时直接sys.exit(0)即本次启动的整个会话内所有Edit/Write/MultiEdit都绕过钩子。文档对该用法的约束是明确的只在已验证安全、否则会命中模式的具体操作时使用操作完成后立即恢复默认启用不要把export ENABLE_SECURITY_REMINDER0写进 shell rc 文件——文档将其列为训练自己无视警告的反模式默认开启才是安全默认值。如果只是某个文件合理地需要eval()或pickle例如沙箱 REPL、故意不安全的解析器文档推荐的文件级做法是在该文件中用注释说明原因例如# SAFETY: pickle is the required serialization format for this internal tool. # This file does NOT accept untrusted input. See SECURITY.md for boundary analysis. import pickle按文档说明这种注释不会让钩子静默该文件本会话第一次编辑仍会警告一次确认后的后续编辑由会话缓存放行。文档同时提醒会话缓存不是长期安全策略本会话放过一次不能替代文件内的说明注释。状态文件维护~/.claude/security_warnings_state_*.json可以安全删除文档原文You can safely delete ... at any time钩子会在下次运行时重新生成。若怀疑某个会话的缓存状态异常导致不再警告删除对应会话的状态文件即可重置该会话的警告状态。已知限制子串匹配而非 AST 解析模式在字符串字面量或注释中出现也会命中。pretooluse_hook_canon.md 给出了估计误报率其中pickle约 30%任何对该模块的引用都会命中eval(约 5%SQL f-string 约 15%GitHub Actions 路径检查约 0%。高误报规则依赖会话缓存来避免反复打扰若需要更严格的检测文档建议把 semgrep、CodeQL 等 SAST 工具作为 CI 步骤叠加使用而不是把复杂度推进 PreToolUse 钩子。删除规则需要评审文档规定任何人都可以添加模式但删除模式需要安全评审因为每条规则对应真实的 CVE 类别。版本号不一致仓库内 plugin.json 声明版本2.9.0而 SKILL.md 页脚标注Version: 2.7.3两处文档未对齐以安装后实际生效的行为为准。钩子设计为每工具调用约 10ms 的纯本地子串扫描不做网络请求、不派生子进程文档的 Hook Performance Discipline 一节要求保持该约束因此它定位为写入前的安全网不承担完整安全审计职能。完成安装后可以用一次故意包含eval(的写入做冒烟检查预期看到警告且该次工具调用被阻断会话状态文件中出现对应的file_path-ruleName键确认无误后日常会话保持默认启用仅在已验证安全的操作中临时使用ENABLE_SECURITY_REMINDER0。【免费下载链接】claude-skills380 Claude Code skills agent skills plugins (30 Agents, 70 custom commands, 380 skills, customizable references, scripts)for Claude Code, Codex, Gemini CLI, Cursor, and 8 more coding agents — engineering, marketing, product, compliance, C-level advisory, research, business operations, commercial finance, and your daily productivity skills.项目地址: https://gitcode.com/GitHub_Trending/cla/claude-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表