Back to skills
SKILL.md
Security Hardening Zh
ASecurity安全加固、威胁建模、OWASP Top 10 防护、输入校验、SSRF、依赖审计分诊、供应链卫生、限流、密钥管理、隐私合规、LLM 应用安全。当用户说「这个登录流程安全吗」「审一下输入处理有没有漏洞」「文件上传怎么做安全」「npm audit 报了一堆怎么办」「要接 LLM,安全上注意什么」「用户数据怎么合规存」「密钥泄露了怎么办」时使用。流程:先五分钟威胁建模(信任边界、资产、STRIDE、滥用用例)→ 三层边界(总是做/先问/绝不)→ OWASP 防护模式(注入、鉴权、XSS、越权、配置、数据暴露、SSRF)→ 边界处 schema 校验、上传限制、派生路径上的破坏性操作三重检查 → 依赖审计按可达性分诊与供应链规则 → 限流要用共享存储 → 密钥泄露立刻轮换 → 数据最小化与保留期 → LLM 输出视为不可信输入。也覆盖「注册登录流程」「哪些必须现在修」「接大模型做客服」这类说法。改编自 addyosmani/agent-skills 的 security-and-hardening(MIT)。
- 2 stars
- 0 votes
- 0 copies
- 0 views
- Added October 13, 2026
Works with
Security analysis
100/100Pro scans all 2 files and shows the line behind each finding
npx -y skills add po-et/workbuddy-skills --skill security-hardening-zh --agent claude-codeAre you the author of Security Hardening Zh?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/po-et-security-hardening-zh)---
name: security-hardening-zh
description: 安全加固、威胁建模、OWASP Top 10 防护、输入校验、SSRF、依赖审计分诊、供应链卫生、限流、密钥管理、隐私合规、LLM 应用安全。当用户说「这个登录流程安全吗」「审一下输入处理有没有漏洞」「文件上传怎么做安全」「npm audit 报了一堆怎么办」「要接 LLM,安全上注意什么」「用户数据怎么合规存」「密钥泄露了怎么办」时使用。流程:先五分钟威胁建模(信任边界、资产、STRIDE、滥用用例)→ 三层边界(总是做/先问/绝不)→ OWASP 防护模式(注入、鉴权、XSS、越权、配置、数据暴露、SSRF)→ 边界处 schema 校验、上传限制、派生路径上的破坏性操作三重检查 → 依赖审计按可达性分诊与供应链规则 → 限流要用共享存储 → 密钥泄露立刻轮换 → 数据最小化与保留期 → LLM 输出视为不可信输入。也覆盖「注册登录流程」「哪些必须现在修」「接大模型做客服」这类说法。改编自 addyosmani/agent-skills 的 security-and-hardening(MIT)。
author: Captain
version: 0.1.1
display_name: "安全加固(威胁建模到 LLM 安全)"
display_name_en: "Security & Hardening (zh)"
description_zh: "先威胁建模再加固:三层边界、OWASP 防护模式、边界校验与 SSRF、派生路径破坏性操作三重检查、依赖审计分诊与供应链卫生、共享存储限流、密钥轮换、隐私最小化、LLM 输出当不可信输入。"
description_en: "Threat-model first, then harden: three-tier boundaries, OWASP prevention patterns, boundary validation and SSRF, triple checks for destructive ops on derived paths, dependency audit triage and supply-chain hygiene, shared-store rate limiting, secret rotation, data minimization, LLM output as untrusted input."
tags:
- "安全加固"
- "security"
- "OWASP"
- "威胁建模"
- "SSRF"
- "依赖审计"
- "LLM 安全"
- "密钥管理"
examples_zh:
- "审一下这个注册登录流程的安全问题"
- "npm audit 报了 40 个漏洞,哪些必须现在修"
- "我们要接大模型做客服,安全上要做什么"
examples_en:
- "Audit this signup/login flow for security issues"
- "npm audit reports 40 findings, which must be fixed now"
- "We're adding an LLM chatbot, what security work is needed"
metadata:
{ "openclaw": { "requires": { "bins": [] }, "os": ["darwin", "linux", "windows"], "emoji": "🛡️" } }
---
# 安全加固
把每个外部输入当敌意的、每个密钥当神圣的、每个授权检查当必需的。安全不是一个阶段,是对每一行碰用户数据、鉴权、外部系统的代码的约束。
用于:接受用户输入、鉴权授权、存传敏感数据、集成外部 API、上传/webhook/回调、支付或个人信息。
## 先威胁建模(五分钟)
1. **画信任边界**:不可信数据从哪进入——HTTP 请求、表单、上传、webhook、第三方 API、消息队列、**LLM 输出**,以及看起来"内部"的本地值:别的进程的命令行或环境、共享卷上的文件名、任务载荷里的路径。**信任看谁写的值,不看哪条通道送来的。**
2. **点名资产**:凭证、PII、支付数据、管理员操作、资金流动。
3. **对每条边界过一遍 STRIDE**:冒充(认证、签名)/ 篡改(完整性校验、参数化查询、HTTPS)/ 抵赖(安全事件审计日志)/ 信息泄露(加密、字段白名单、通用错误)/ 拒绝服务(限流、输入大小上限、超时)/ 提权(授权检查、最小权限)。
4. **在用例旁写滥用用例**:每个功能问"我会怎么滥用它",把它变成第一个测试。
说不出信任边界就还没准备好加固——多数事故始于设计(OWASP A04)。
## 三层边界
**总是做**:边界校验所有外部输入;数据库查询全部参数化;输出编码防 XSS(用框架自动转义,别绕开);全部 HTTPS;密码用 bcrypt/scrypt/argon2;安全头(CSP、HSTS、X-Frame-Options、X-Content-Type-Options);会话 cookie httpOnly + secure + sameSite;每次发布前对锁文件跑包管理器原生审计。
**先问人**:新增或改动鉴权流程;存新类别的敏感数据;新增外部集成;改 CORS;加文件上传;改限流;授予更高权限或角色。
**绝不**:提交密钥;记录敏感数据;把客户端校验当安全边界;为方便关安全头;对用户数据用 `eval()`/`innerHTML`;把会话放客户端可读存储(localStorage 存 token);向用户暴露堆栈或内部错误。
## OWASP 防护模式
注入:参数化/ORM,绝不拼接。认证:强哈希、会话配置(httpOnly/secure/sameSite/有效期)、密钥来自环境。XSS:框架自动转义;必须渲染 HTML 时先 DOMPurify。越权:每个端点既认证又**授权**——检查当前用户拥有该资源。配置:helmet 类安全头、CSP、CORS 限定已知来源。数据暴露:响应剔除 passwordHash/resetToken 等字段;密钥走环境变量并在缺失时启动失败。
**SSRF**:服务端抓取用户可影响的 URL(webhook、从 URL 导入、图片代理、链接预览)会被瞄准内网(云元数据、localhost、私网)。做法:只允许 https、主机白名单、解析**全部** DNS 记录并拒绝任何私有/保留地址、禁止重定向。仍有 TOCTOU 缝隙(fetch 会再解析一次 DNS,短 TTL 可重绑定):高风险面要解析一次后连固定 IP,或前置过滤代理。
## 输入校验
在边界用 schema 校验(zod 类),422 返回结构化错误,之后内部代码信任类型。上传限制类型与大小,关键场景查魔数不信扩展名。
**派生路径上的破坏性操作**:删除/移动/覆盖只和命名目标的值一样安全;从内核、任务载荷、兄弟服务读到的值只证明它从哪来,不证明谁写的;"绝对路径、至少一层深"这种形状检查会被误当授权,这就是清理例程删掉根目录的方式。破坏性调用前三条都要:解析符号链接后目标在**白名单根**之下;至少在根**之下一层**(根永远不是目标);带有**它是你的证据**且在操作前、在任何会删掉该证据的清理前读取。拒绝时记录并停止——退回更宽的默认路径正是要防的失败。限制:树内的标记是自证,写得进去的都能写标记,所以预期所有者要来自认证状态且标记要有完整性保护;解析路径再对名字操作在共享卷上是 check/use 竞争,要按描述符持有目标、no-follow、根下操作。
## 依赖审计分诊
审计只报已知公告,不证明包可信或漏洞代码可达。严重/高危 → 运行/构建/测试/部署路径可达则立即修(升级、补丁、替换),确认不可达则尽快修但不阻塞;有修复用修复版,没有则找变通、考虑替换、或加白名单并设复审日期;中危 → 生产可达下个周期修,仅开发依赖进待办;低危 → 常规更新时修。延后必须写原因和复审日期。
**供应链卫生**:先找安装边界与包管理器(拥有锁文件的工作区根;`packageManager`、锁文件、CI 三者一致,不一致或有竞争锁文件就停);首次执行前**禁用依赖安装脚本**,检查待执行脚本源码只批准最少的包,提交策略后用 frozen/immutable 安装验证;**绝不自动执行强制审计修复**(`npm audit fix --force`),预览、读变更日志、逐个测试;支持处验证签名与来源(`npm audit signatures`),缺失是调查信号;新依赖、锁文件 diff、脚本策略变更一起评审——所有权、维护、发布时长、来源、传递图、拼写仿冒(`cross-env` vs `crossenv`)。
## 限流
API 通用限制 + 鉴权端点更严格。**多于一个进程就要用共享存储计数**:进程内计数器在负载均衡后有效上限变成 `max × 实例数`,无服务器/边缘运行时每次调用从零开始,鉴权限制可能永远不触发;用 Redis 类共享 store 或 HTTP 型限流器。
## 密钥管理
`.env.example` 提交、`.env`/`.env.local` 不提交;`.gitignore` 含 `.env .env.local .env.*.local *.pem *.key`;提交前 grep 暂存区。**密钥一旦进过提交就轮换**:删行或改写历史不够,到达远端那一刻就当已泄露——先吊销重发,再清历史。
## 数据隐私与合规
安全问"攻击者能读吗",隐私问"我们该不该持有、持有多久"。最便宜的是从未收集的数据;个人数据是要最小化的负债。分类:非个人(聚合、匿名计数)/ 个人 PII(姓名、邮箱、IP、设备或用户 ID:最小化、访问控制、纳入导出/删除)/ 敏感(健康、金融、位置、生物特征、证件、未成年人:更强依据、更严访问、通常加密 + 审计)。规则:**有目的才收集**("以后可能有用"不是目的,是潜在泄露范围;PII 不进遥测);**先定保留期然后真的删**(含备份、缓存、搜索索引、分析副本;无过期的数据是排期的泄露);支持所在辖区要求的数据主体权利(导出、更正、删除)——这是工程功能,schema 要让用户数据可找可删;收集或向第三方(分析/广告/LLM 供应商)共享前取得可审计的同意,并签数据处理协议;地域规则可配置,不写死一地法律。
## LLM 应用安全(OWASP LLM Top 10)
**模型输出当不可信输入**(LLM05):绝不直接进 eval、SQL、shell、innerHTML、文件路径,像原始用户输入一样校验和编码——先解析、再 schema 校验、再只执行白名单动作。**假设提示词会被劫持**(LLM01):上下文里的任何不可信文本(用户消息、抓的网页、PDF)都可能带指令;系统提示不是安全边界,权限在代码里执行。**密钥与他人数据不进提示词**(LLM02/07):上下文里的都可能被复述。**约束工具与代理权限**(LLM06):最小工具集、破坏性操作要确认、校验每个工具参数。**限制消耗**(LLM10):token、速率、循环/递归深度封顶。**隔离检索数据**(LLM08):向量库是信任边界,按租户分区、索引前校验文档。
## 安全评审清单(摘要)
认证:强哈希、httpOnly/secure/sameSite、登录限流、重置令牌过期。授权:每个端点查权限、只能访问自己的资源、管理操作验角色。输入:边界校验、参数化、输出编码、服务端抓取白名单、派生路径破坏性操作三重检查。数据:无密钥入库、敏感字段不出响应、PII 静态加密、分类/目的/最小化、保留期与删除路径、导出/删除请求与第三方共享同意。基础设施:安全头、CORS 限定、依赖审计、错误不暴露内部。供应链:单一锁文件、frozen 安装、审计按可达性分诊、安装脚本默认阻断、新依赖评审。AI:模型输出不可信、密钥与他人数据不进提示、工具权限受限。
## 合理化借口对照
| 借口 | 现实 |
|---|---|
| "内部工具不用管安全" | 内部工具也会被攻破;攻击者找最弱一环 |
| "安全以后再加" | 事后补比一开始做难 10 倍 |
| "没人会来攻击这个" | 自动扫描器会找到;靠隐蔽不是安全 |
| "框架处理了安全" | 框架给工具不给保证,仍要用对 |
| "只是原型" | 原型会变生产 |
| "威胁建模小题大做" | 五分钟的"我会怎么攻它"避免事后打不了补丁的设计缺陷 |
| "LLM 输出只是文本" | 那段文本可以是 SQL、script 标签、shell 命令 |
| "审计过了依赖就安全" | 审计匹配已知公告,抓不到新恶意包,也不让未评审的安装脚本变安全 |
| "先收着以后可能用" | 不持有的数据不会被泄露、传票、误删 |
| "删除请求手工处理" | 手工漏掉备份、缓存、分析副本;schema 找不到用户数据就无法履行 |
| "合规是法务的事" | 导出、删除、保留、同意是 schema 和代码,PII 散到十个系统后法务补不了 |
## 红灯
用户输入直接进查询/命令/HTML;删除/移动/覆盖的目标来自载荷、配置或别的进程的命令行却只做了形状检查;源码或历史里有密钥;端点没有认证或授权;CORS 通配;鉴权端点没限流或多实例前用内存限流器;向用户暴露堆栈;已知严重漏洞的依赖、竞争锁文件、不可复现安装、一揽子批准的脚本;服务端抓用户 URL 无白名单;LLM 输出进查询/DOM/shell/eval;密钥、PII 或完整系统提示进了 LLM 上下文;个人数据无目的、无保留期、无删除路径;PII 发给第三方无同意;"删除账号"只翻标志而数据仍在。
## 验收
```
- [ ] 原生审计无未处理的可达严重/高危;CI 保留权威锁文件并阻断未评审脚本 - [ ] 源码与历史无密钥 - [ ] 外部输入在边界校验
- [ ] 破坏性文件操作先解析符号链接再验根/深度/所有权 - [ ] 每个受保护端点有认证与授权 - [ ] 响应带安全头 - [ ] 错误不暴露内部
- [ ] 鉴权端点限流且多实例用共享存储 - [ ] 服务端 URL 抓取有白名单 - [ ] LLM 输出用前校验编码 - [ ] 个人数据已分类、最小化、有保留期 - [ ] 删除与导出端到端可用(含备份、缓存、分析)
```
---
改编自 [addyosmani/agent-skills](https://github.com/addyosmani/agent-skills) 的 `security-and-hardening`(MIT)。改动见 ATTRIBUTION.md。
Files in this skill
- ATTRIBUTION.md
- SKILL.md
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.