Skip to content
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Add SKILL.md (web-security-audit skill)
  • Loading branch information
cnbruce committed Aug 20, 2026
commit 1329631a734d1eb684d5e2dd7665e9b6386b65de
66 changes: 66 additions & 0 deletions skills/web-security-audit/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
name: web-security-audit
description: 对 Web 项目执行全面安全审计与加固评估(白盒源码审计 + 黑盒线上行为验证 + 负面行为测试三件套)。当用户要求"安全审计/安全检查/安全评估/渗透测试/漏洞排查/加固方案/上线风险评估",或询问"有没有后门/会不会被爆库/有没有 SQL 注入/XSS/CSRF/越权"等安全问题时使用。覆盖 Node.js/Express、Python、PHP 等任意技术栈。执行前必须先确认目标授权(用户自有项目或已获书面授权),全程非破坏性。
license: MIT
version: "1.0.0"
---

# Web 安全审计

## 概述

对 Web 应用执行**白盒(源码)+ 黑盒(线上行为)结合**的授权安全审计。核心方法论:

- **白盒抓"因"**:注入、XSS、越权、鉴权缺失等漏洞成因,静态核查。
- **黑盒抓"果"**:攻击者可观察的状态码、响应体、兜底行为、敏感文件可达性。
- **关键洞见(本 skill 的沉淀来源)**:只做白盒会系统性漏掉"行为侧"问题(如畸形输入触发 500、SPA 兜底把 `/db/blog.db` 变成 200 假象);只做黑盒会漏掉不触发路径的成因。**两者必须交叉验证**。

## 何时使用

触发词:安全审计、安全检查、安全评估、渗透测试、漏洞扫描、加固、上线风险评估、"有没有后门"、"会不会被爆库"、SQL 注入/XSS/CSRF/越权排查、敏感信息泄露排查等。

## 安全边界(先确认,破坏性测试一律不做)

1. **授权确认**:目标必须是用户自有项目,或用户已获书面授权。未确认前不做任何主动探测。
2. **非破坏性铁律**:
- 不执行真实 SQL 注入/命令注入——用无害 payload 观察行为(`limit='`、`1 OR 1=1` 作为字面值绑定,不落地数据);
- 不爆破登录——如需验证弱口令,**单次尝试**并明确告知用户;
- 不实际上传恶意文件、不删改数据、不触发 DoS/高并发;
- 登录限流类验证注意:连续失败可能锁定出口 IP(如 15 分钟 5 次),影响用户自己访问后台,需权衡或提前告知。
3. **线上探测克制**:用 curl/浏览器开发者工具,探测请求控制在几十个内。

## 审计流程(按序执行)

### Step 1 摸底
读项目入口(server.js / app.js / main.py 等)、依赖清单、路由清单、数据库初始化脚本、鉴权中间件、上传与静态服务配置。产出:路由清单(公开 vs 受保护)、技术栈与版本、数据流。

### Step 2 白盒找因
对照 `references/checklist.md` 逐类静态核查:SQL 注入、XSS、认证与会话、越权/IDOR、CSRF、文件上传、路径遍历/敏感文件、SSRF、信息泄露、依赖漏洞。每一类给出"是否存在 + 证据行号"。

### Step 3 黑盒验果
- 安全响应头清单:CSP / X-Frame-Options / X-Content-Type-Options / Referrer-Policy / HSTS / Permissions-Policy 是否齐全;
- HTTP→HTTPS 是否 301;
- 公开接口鉴权状态、错误响应体是否泄露堆栈;
- 目录遍历(`../`、`%2e%2e`)是否被拦。

### Step 4 负面行为测试三件套(必做,本 skill 核心)
1. **公开接口畸形输入**:对每个公开参数发畸形值(`'`、`1 OR 1=1`、`' OR 1=1--`、负数、超长),断言返回 **400/422 而非 500**;若 500,检查响应体是否泄露 SQL/堆栈。
2. **敏感路径清单 + content-type 校验**:逐一请求 `/db/*.db`、`/server.js`、`/package.json`、`/config.json`、`/.git/HEAD`、`/.env` 等,**必须校验 content-type**:200 且 `text/html` = SPA 兜底假象(非真泄露,但要修兜底);200 且真实 MIME = 真泄露(Critical)。
3. **未知路径 404 语义**:SPA 兜底只应命中无扩展名前端路由;带扩展名路径必须 404。全路径 200 + index.html = 兜底过宽。

可直接运行 `scripts/probe.sh <target-url>` 执行三件套(脚本含完整探测命令与判定注释)。

### Step 5 交叉验证与报告
- 黑盒结果与白盒代码相互印证(如 500 的根因在代码中定位到具体行)。
- 输出报告:风险分级表(Critical/High/Medium/Low/Info);每项附"现象/影响/修复代码/验证方法/是否已修";**直接回答用户核心问题**;列出黑盒未覆盖项(如需真实流程/样本/凭据的测试),不装作测过。

## 输出规范

- 用表格汇总风险分级与修复清单(用户偏好结构化交付)。
- 修复代码给出可直接粘贴的最小改动。
- 报告落盘路径由主 Agent 决定(如 `docs/security-audit-YYYY-MM-DD.md`),若 docs/ 被 .gitignore 排除则注明不入库。

## 资源

- `references/checklist.md`:完整漏洞核查清单 + 敏感路径清单 + 判定规则 + 常见陷阱(审计时按需加载)。
- `scripts/probe.sh`:负面行为测试探测脚本(畸形输入 / 敏感路径 / 未知路径,非破坏性)。