关于 software-security-appsec
用于设计和审查应用层安全的技能,涵盖身份验证、授权、输入处理、API、密码学、供应链及 Agent 系统。它提供决策指引、参考资料和验证清单,支持以安全为重点的工程工作。
主要功能
- 01身份验证与授权指引
- 02输入校验和漏洞控制
- 03API 与供应链安全实践
- 04Agent 与 MCP 应用威胁建模
- 05安全审查及验证清单
适用场景
- 01设计或审查身份验证与会话流程
- 02评估 API、上传和输入处理风险
- 03为 Agent 或 MCP 应用进行威胁建模
- 04规划应用安全整改
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vasilyu1983/ ai-agents-public --skill software-security-appsec安装后在 Claude Code 中输入/software-security-appsec确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
learnings.consolidated.mdlearnings.mdagents/openai.yamlassets/api/template-secure-api.mdassets/mobile/template-mobile-security.mdassets/web-application/template-authentication.mdtemplate-authorization.mdassets/web3/crypto-security.mddata/sources.jsonevals/evals.jsonreferences/advanced-xss-techniques.mdagentic-llm-appsec.mdapi-security-patterns.mdauthentication-authorization.mdcommon-vulnerabilities.mdcryptography-standards.mddotnet-efcore-crypto-security.mdgame-theory-applied.mdincident-response-playbook.mdinput-validation.mdoperational-playbook.mdowasp-top-10.mdreliability-theory-applied.mdsecure-design-principles.mdsecurity-business-value.mdsmart-contract-security-auditing.mdsupply-chain-security.mdthreat-modeling-guide.mdzero-trust-architecture.md详细介绍
软件安全与应用安全
将此技能用于应用层安全:身份验证、授权、输入与输出处理、密码学、供应链控制、API 安全、威胁建模和安全审查。这是应用安全的决策层,而非通用后端或基础设施加固。
快速参考
| 任务 | 使用 |
|---|---|
| 风险类别框架 | references/owasp-top-10.md |
| 身份验证与授权方案 | references/authentication-authorization.md、assets/web-application/template-authentication.md、assets/web-application/template-authorization.md |
| 输入处理、上传、渲染和常见漏洞 | references/input-validation.md、references/common-vulnerabilities.md |
| 安全设计与威胁建模 | references/secure-design-principles.md、references/threat-modeling-guide.md |
| API 与供应链安全 | references/api-security-patterns.md、references/supply-chain-security.md、assets/api/template-secure-api.md |
| 密码学、密码哈希与传输方案 | references/cryptography-standards.md |
| Agentic、大模型和 MCP 应用设计 | references/agentic-llm-appsec.md(测试内容位于 qa-security-testing) |
| 移动端安全存储、证书固定策略、证明 | assets/mobile/template-mobile-security.md |
| 密钥存储方案选择 | 请参阅下文的“密钥存储方案选择”——选择在提供方使用加密还是明文,以及存储后如何验证 |
| 事件响应与安全计划框架 | references/incident-response-playbook.md、references/security-business-value.md、references/operational-playbook.md |
密钥存储选择
选择提供商的凭据存储方式,并确认谁可以读取值;静态加密并不意味着只能写入,也不意味着会完整审计读取操作。
| 提供商 | 凭据存储 | 使用前检查 |
|---|---|---|
| Cloudflare Workers | wrangler secret put | 使用 Secret 绑定,而非普通的 vars 绑定;参见 Workers 密钥 |
| Vercel | Secret 环境变量 | 在 Vercel 文档中确认当前的只写选项和环境范围;可读取的 Config 值仍可能经过加密 |
| GitHub Actions | Repository / Organization Secrets | 限制工作流和环境的访问权限;不要将凭据放在工作流的 env: 字面值或仓库 Variables 中 |
| AWS | Secrets Manager 或 SSM SecureString | 限制解密/读取权限;获授权的客户端可以获取明文(Secrets Manager 检索) |
| Kubernetes | 配置了静态加密的 Secret | Base64 本身并非加密;限制 API 和 Pod 创建权限(Kubernetes Secrets) |
API 密钥、签名密钥、密码和 webhook 密钥应使用密钥存储。公开标识符应放在普通配置中。对于多行值,优先使用受保护的文件或提供商 CLI 输入,并通过授权测试验证字节完全一致,且不要打印值;不要假设每个控制面板都会破坏换行符。
如果凭据泄露给未经授权的读取者,应在签发方撤销并轮换凭据,删除泄露的副本,并验证替换凭据的范围。凭据存储在可读取的配置中,值得进行泄露风险评估;但这本身并不能证明已经发生泄露。
适用场景
- 审查或设计身份验证、会话、令牌或授权流程。
- 验证输入处理、上传、渲染和不可信数据边界。
- 保护 API、webhook、浏览器应用和管理界面。
- 对功能或 AppSec 架构选择进行威胁建模。
- 加固依赖项、构建、制品和发布路径。
- 从 AppSec 角度审查 Agent 化或连接 MCP 的应用。
转至其他领域
- 不侧重安全的通用后端工程:使用 software-backend。
- 基础设施加固、IAM、集群策略或云安全态势:使用 ops-devops-platform。
- 智能合约专项审计:使用 software-crypto-web3(该项目维护 references/smart-contract-security-auditing.md 中的审计方法)。
- 安全测试工具和覆盖率(SAST/DAST、LLM/Agent 化测试套件):使用 qa-security-testing。
- ML 管道或模型运维治理:使用 ai-mlops。
- 仅涉及合规解释、不涉及实现选择:转交法律或合规相关人员。
- 对已发布的二进制文件、APK/IPA、Electron/ASAR、固件进行逆向工程或反编译:本库不负责此类工作。请使用 morluto/rea 提供的上游 REA skill 和 MCP 服务(MIT),而不要使用此处的副本,因为它与 REA 的工具名称和版本绑定。该工具会在本地二进制文件上执行分析,因此请将其视为第三方 skill 进行审查(agents-skills,“安装前审查第三方 skill”),并在安装前固定版本。
默认原则
- 使用 OWASP Top 10 确定风险范围,使用 ASVS 确定要求深度,并使用 NIST SSDF 作为 SDLC 基线。在选择时,阅读发布方的页面,记录所采用的版本和状态,并区分草案与最终标准:OWASP Top 10、ASVS、SSDF、SLSA、NIST digital identity、WebAuthn、OWASP GenAI。CRA 的适用性见 supply-chain-security.md。
- 在可行时优先使用通行密钥;对于以浏览器为主的应用,优先使用会话。
- 在选择控制措施前,先建模信任边界。
- 在 Agentic 系统中,将工具调用、检索内容和长期记忆视为不可信输入。
工作流
- 确定资产、信任边界、攻击者能力和故障后果。
- 对问题分类:身份验证、授权、不可信输入、API、供应链、Agentic 流程或安全设计问题。
- 从相关参考资料中选择控制措施类别。
- 应用具体的防护措施并确定验证深度。
- 在给出最终建议前,重新核查会变化的标准和服务提供方的行为。
使用 AI 审查者进行自我审计时的范围界定:说明团队拥有代码,目标是修复问题;每轮审查一个模块或信任边界;先运行静态工具(SAST、依赖项审计、密钥扫描),再让审查者根据实际代码路径对输出进行分诊;要求提供修复方案和安全的复现方法,而不是攻击载荷。针对整个代码仓库发出“找出所有漏洞”的提示词,只会得到浅显且无法验证的发现,还可能触发服务提供方的安全过滤器。
身份验证模型选择
| 情况 | 选择 | 避免 |
|---|---|---|
| 面向浏览器用户的产品,且可以接受会话状态 | 服务端会话(Cookie + 服务端存储) | 将 JWT 用作会话——难以撤销 |
| 使用设备原生生物识别功能的移动端/桌面端应用 | 通行密钥(WebAuthn) | 短信 OTP——存在 SIM 卡交换风险 |
| 第三方登录或委托访问 | 使用 OIDC 处理身份;使用 OAuth 授权码流程 + PKCE 处理委托访问 | 隐式流程;遵循 RFC 9700 安全指南 |
| API 到 API,无用户上下文 | mTLS 或短期签名令牌 | 长期有效的 API 密钥 |
| 可信集群内的服务间身份验证 | 服务账号 + mTLS | 共享密钥或用户令牌 |
输入控制措施选择
| 接收端/操作 | 必需的控制措施 |
|---|---|
| SQL 查询构造 | 参数化查询或 ORM 绑定;绝不进行字符串拼接 |
| Shell/进程执行 | 对参数使用允许列表;避免使用 shell=True/通过 exec 执行用户输入 |
| HTML 渲染 | 根据上下文进行输出编码;设置 CSP 标头 |
| 文件上传目标路径 | 规范化路径;拒绝路径遍历序列;将文件存储在 Web 根目录之外 |
| 重定向目标 | 对已知来源使用允许列表;拒绝开放重定向模式 |
| LDAP/XPath/XML | 在构造查询前使用库级转义或进行架构验证 |
| LLM/Agent 工具调用输入 | 视为不可信输入;执行前验证架构;记录意图和范围 |
核心决策
身份验证与会话
默认选择:
- 当产品和恢复流程支持时,使用通行密钥
- 浏览器应用使用服务端会话
- 使用 OIDC 进行登录;使用 OAuth 授权码流程加 PKCE 处理委托访问,并遵循 RFC 9700。在将 OAuth 2.1 状态作为最终标准介绍前,先进行核查
- 仅在确实需要无状态性时使用短期令牌
选择与应用形态相符的最简单安全模型。
授权与输入边界
最低要求:
- 默认拒绝
- 在服务端检查授权
- 在边界处进行验证
- 对危险的处理目标使用参数化
- 在证明内容安全之前,将富内容和文件上传视为主动内容
安全设计与威胁建模
在实现前进行威胁建模:
- 敏感数据的存储
- 特权操作
- 外部回调
- 文件上传
- 富内容渲染
- Agent 或工具流程
事后加固比默认安全设计更缓慢,也更薄弱。
Agentic 与 MCP 安全
明确建模以下风险:
- 提示词注入
- 工具滥用
- 记忆投毒
- 跨租户泄漏
- 服务端能力范围过宽
- 不安全的审批流程
将只读能力与可变更能力分开,并记录意图、范围和结果。绝不能让同一上下文同时包含不可信内容、私有数据以及数据外传或变更通道。威胁到控制措施的设计:references/agentic-llm-appsec.md。
计量或高成本操作(单一事实来源设计模式):对于任何会消耗有限配额、花费资金或以其他方式造成高成本/不可逆后果的 Agent 操作,应在执行该次具体调用前立即重新检查当前授权和配额状态,而不是依赖更早的缓存检查。遵循用户授权的预算和操作范围;如果调用将超出这些限制,或授权要求每次调用都进行确认,则应重新请求确认。如果运行中途失败,应从已保存的状态恢复,而不是重新开始,因为重新开始会再次产生计量费用。
供应链与发布完整性
使用:
- 锁文件
- 可信发布或来源证明
- 构件完整性检查
- 在相关情况下使用 SBOM
- 明确审查传递依赖风险
验证清单
发现项证据门槛。
对于每项安全发现,都要明确攻击者能力、可触达的入口点、信任边界跨越、处理目标以及具体影响。将已确认的利用路径与纵深防御缺口、未经验证的假设区分开来。提供安全的复现方式或代码路径追踪,以及可行的最小修复方案;严重程度应取决于可利用性和影响,而不能仅凭 API 看起来有风险来判断。
在定稿任何 AppSec 设计或审查输出前:
- 明确绘制信任边界——每个跨越边界的输入都经过验证或被拒绝
- 从默认方案中选择身份验证模型(通行密钥 → 服务端会话 → OIDC/PKCE → 短期令牌)
- 在服务端检查授权;在每个特权端点强制执行默认拒绝
- 所有处理目标都使用参数化:SQL、shell、LDAP、XPath、XML、HTML 渲染、重定向目标
- 将文件上传和富内容视为主动内容:验证类型、限制大小、隔离存储
- 凭证使用提供商的机密存储;验证读取权限、环境范围和加密配置
- 落实供应链控制:锁文件、依赖项扫描、构件完整性检查,以及按需生成 SBOM
- 对 Agent 流程进行威胁建模,覆盖提示词注入、工具滥用、跨租户泄漏和范围过宽问题
- 记录剩余风险、缓解控制措施和负责人
- 在最终输出前,根据当前来源核实标准和浏览器行为相关说法
输出模式
默认采用以下模式之一:
- 安全设计简报: 威胁、控制措施选择和验证范围。
- 安全审查: 发现项、风险和实施优先级。
- 身份验证或 API 加固计划: 推荐模型、易错点和验证步骤。
- Agentic AppSec 审查: 威胁模型、能力边界和审批控制。
已知陷阱
- 等到架构和产品流程已经敲定后才开始安全审查,这会让基础设计问题变成代价高昂的补偿性控制措施。
- 混淆身份验证与授权,并假设有效的身份令牌就能回答权限问题。
- 将文件上传、富文本、Markdown 或检索到的工具内容视为被动数据,而非攻击者控制的主动输入。
- 对只读和会修改数据的工具或 MCP 操作复用同一权限范围。
- 假设基础设施安全态势或托管平台可以弥补薄弱的应用级控制设计。
- 默认使用带有
'unsafe-inline'或'unsafe-eval'的 CSP。两者都会削弱该策略原本要提供的大部分 XSS 防护;如果依赖项强制要求使用其中任一项,应将其视为技术债务,指定负责人并制定迁移到 nonce 或哈希的计划。
反模式
- 不经核实就将标准状态视为永久有效。
- 使用超出应用实际需求的复杂身份验证机制。
- 在系统深处信任未经验证的输入。
- 默认赋予工具或 MCP 过宽的权限。
- 在实现方案已经锁定后才为功能补上安全措施。
- 混淆基础设施安全态势与应用安全设计。
导航
- 在攻击者动机不确定的情况下确定控制措施优先级,请加载 game-theory-applied.md;要权衡可用性,请加载 reliability-theory-applied.md。
- 关于横向信任边界,请加载 zero-trust-architecture.md。
- 关于高级浏览器载荷或 .NET 加密集成,请加载 advanced-xss-techniques.md 或 dotnet-efcore-crypto-security.md。
- 关于合约代码风险,请遵循上文的软件加密与 Web3 交接说明,并使用 assets/web3/crypto-security.md 查阅漏洞目录。
- 当需要查找来源以核实某项说法时,请查阅 data/sources.json。
致谢:Agentic and MCP Security 中针对计量或高成本操作的授权检查模式改编自 Ansvar Systems AB 的 regulatory-threat-model,该项目位于 davila7/claude-code-templates,提交版本为 22d8efa9e9afcf31b98b7e3952ec557694e72c13,采用 CC-BY-4.0 许可。提取日期:2026-08-09。这是一个单一来源模式(中等置信度),提取自一个特定厂商、绑定专有工具的技能——请将其视为值得考虑的具名模式,而非得到广泛佐证的惯例。
经验循环
如果以往的决策或陷阱与当前情况相关,请查阅 learnings.consolidated.md(如果存在);仅在需要回顾历史或将其作为现有备用资料时,才使用 learnings.md。否则,跳过这两个文件。
应用这些经验后,如果遇到值得记住的模式、值得避免的错误或令人意外的领域事实,请通过 agents-skills-feedback-loop/scripts/append_learning.py 向 learnings.md 追加一条带日期的项目。不要修改 SKILL.md 本身。