security-guidance – skill Bảo mật cho agent AI
Hook PreToolUse cho Claude Code phát hiện anti-pattern bảo mật. Bắt 12 rủi ro bảo mật phổ biến (command injection, XSS, SQL injection, deserialization không an toàn, GitHub Actions workflow injection, code injection qua eval/new Function) TRƯỚC KHI thao tác Edit/Write/MultiEdit hoàn tất. Cache trạng thái phiên giúp tránh cảnh báo trùng lặp warni
Cài skill security-guidance bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/security-guidance-3ca55.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /security-guidance – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/security-guidance-3ca55.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $security-guidance – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/security-guidance-3ca55.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /security-guidance – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/security-guidance-3ca55.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /security-guidance – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
Security Guidance Hook
A PreToolUse hook that blocks 12 common security anti-patterns before Claude Code writes them.
This skill is a hook, not a slash command. Once installed, it runs automatically before every Edit, Write, or MultiEdit operation and warns + blocks if it detects a known dangerous pattern.
What It Catches
The hook scans both:
- The file path being edited — flags GitHub Actions workflow files with risky
${{ }}patterns - The content being written — substring matches against 11 anti-patterns
| Pattern | Category | Risk |
|---|---|---|
| GitHub Actions workflow expressions | Path-based | Workflow command injection via untrusted inputs |
| child_process.exec, exec(, execSync( | Substring | Node.js command injection |
| new Function | Substring | JS code injection |
| eval( | Substring | JS code injection |
| dangerouslySetInnerHTML | Substring | React XSS |
| document.write | Substring | DOM XSS |
| .innerHTML = | Substring | DOM XSS |
| pickle | Substring | Python deserialization RCE |
| os.system, from os import system | Substring | Python command injection |
| shell=True (subprocess) | Substring | Python command injection |
| f-string SQL or .format SQL | Substring | SQL injection |
| yaml.load(, yaml.unsafe_load | Substring | YAML deserialization RCE |
How It Works
1. Claude Code is about to run Edit, Write, or MultiEdit
2. PreToolUse hook fires → invokes security_reminder_hook.py with the tool input as JSON on stdin
3. The hook extracts file_path + content + checks against the pattern table
4. If a pattern matches AND this warning hasn't been shown for this file+rule in this session:
- Print the warning to stderr (Claude sees it)
- Exit code 2 → blocks the tool call
- Save the warning key to
~/.claude/security_warnings_state_<session>.json
5. If a pattern matches BUT the warning was already shown this session:
- Allow the tool call (exit code 0) — Claude already saw the warning once
6. If no pattern matches:
- Allow the tool call (exit code 0)
Installation
This plugin ships as a Claude Code plugin with hooks.json wiring:
# In Claude Code:
/plugin marketplace add alirezarezvani/claude-skills
/plugin install security-guidance@claude-code-skillsOnce installed, no further configuration needed — the hook runs automatically.
Configuration
Disable per-session via environment variable:
ENABLE_SECURITY_REMINDER=0 claude
# Hook is bypassed for this sessionUse sparingly — the hook is most useful exactly when you're tempted to disable it (because you're under deadline pressure to ship something you know is sketchy).
Per-File Override Pattern
If a specific file legitimately needs eval() or pickle (e.g., a sandboxed REPL, a deliberately unsafe parser for a fuzzer), document it in the file with a comment:
# 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 pickleThe hook will still warn on first edit per session. After acknowledging, subsequent edits in the same session are allowed (session-state caching).
Why The Patterns Are Substring-Based (Not AST-Based)
Trade-off: AST-based detection would be more precise (no false positives on string literals containing "eval("). Substring-based is:
- Faster — runs in ms, doesn't parse the file
- Cross-language — same hook works for JS/TS/Python/YAML/etc.
- Conservative — false positives are easy to dismiss (one keystroke); false negatives are dangerous
For 90%+ of cases, substring detection is sufficient. If you need stricter detection, layer in a proper SAST tool (semgrep, CodeQL) as a CI step.
State Files
The hook caches "warning shown" state in ~/.claude/security_warnings_state_<session_id>.json. These files:
- Are auto-cleaned after 30 days (10% chance per hook invocation)
- Are session-scoped (each Claude session gets its own)
- Contain a JSON list of
<file_path>-<rule_name>keys
You can safely delete ~/.claude/security_warnings_state_*.json files at any time — the hook regenerates them on next run.
Debug Log
The hook writes to ~/.claude/security-warnings-log.txt for debugging hook misfires:
tail -f ~/.claude/security-warnings-log.txt
# Shows JSON decode errors, state-file save failures, etc.(Upstream version wrote to /tmp/security-warnings-log.txt — we moved it to ~/.claude/ for persistence across reboots.)
Source + Attribution
This plugin is ported from David Dworken's MIT-licensed implementation in [alirezarezvani/aeo-box](https://github.com/alirezarezvani/aeo-box/tree/main/.claude/plugins/security-guidance).
Verbatim: the original 9 patterns (GitHub Actions, child_process.exec, new Function, eval, dangerouslySetInnerHTML, document.write, innerHTML, pickle, os.system) are preserved with their exact warning text.
Modifications:
- Added 3 patterns:
subprocess shell=True, SQL injection via f-string or.format,yaml.unsafe_load - Debug log moved from
/tmp/security-warnings-log.txt→~/.claude/security-warnings-log.txt - Restructured as a claude-skills plugin with
attributionblock in.claude-plugin/authoring-notes.json(originally inplugin.json; relocated when issue #954 showed Claude Code rejects manifests carrying extension keys)
Anti-Patterns
Disabling the hook by default
Defeats the purpose. If ENABLE_SECURITY_REMINDER=0 becomes your default, you've trained yourself to ignore the safety net. Use it only for specific verified-safe operations.
Modifying the pattern list without security review
Anyone can add a pattern. Removing one requires a security review — patterns exist because they map to real CVE classes.
Treating session-state as immutable security policy
The cache prevents nag-spam but is per-session. Don't rely on "I dismissed this once" as long-term policy — use the per-file documentation pattern instead (comment justifying the use).
Related Skills
engineering-team/skills/red-team— adversarial pen-testingengineering-team/skills/threat-detection— threat modeling + detection designengineering-team/skills/ai-security— AI-specific security (prompt injection, etc.)engineering/ship-gate— pre-production audit (8-category, ~89 checks)engineering/skill-security-auditor— security scan for skill packages
Trigger Phrases
- "add security hook"
- "block unsafe code before write"
- "detect command injection"
- "prevent SQL injection patterns"
- "warn on eval / pickle / os.system"
- "GitHub Actions security hook"
---
Version: 2.7.3
Source: Ported from [alirezarezvani/aeo-box](https://github.com/alirezarezvani/aeo-box) .claude/plugins/security-guidance/ (originally by David Dworken at Anthropic, MIT)
License: MIT
Skill liên quan
- security-pen-testing – Dùng khi người dùng yêu cầu kiểm tra bảo mật, pen test, quét lỗ hổng, kiểm tra OWASP Top…
- frontend-mobile-security-xss-scan – Kiểm tra mã frontend để tìm điểm chèn XSS, thao tác DOM không an toàn và thiếu bước…
- frontend-security-coder – Chuyên gia viết mã frontend an toàn, chuyên về phòng chống XSS, sanitize đầu ra và các…
- geo-audit – Kiểm toán GEO+SEO toàn bộ website với việc giao nhiệm vụ song song cho subagent.
- geo-platform-optimizer – Tối ưu tìm kiếm AI theo từng nền tảng — kiểm tra và tối ưu riêng cho Google AI…
- geo-proposal – Tự động tạo đề xuất dịch vụ GEO chuyên nghiệp, sẵn sàng gửi khách hàng, từ dữ liệu audit.
- geo-report – Tạo báo cáo GEO chuyên nghiệp cho khách hàng, gộp toàn bộ kết quả audit thành một tài…
- geo-schema – Kiểm tra và tạo dữ liệu có cấu trúc Schema.org tối ưu cho khả năng AI tìm thấy — phát…