用途
Software Security And AppSec 用于应用层安全,范围包括:身份认证、授权、输入与输出处理、密码学、供应链控制、API 安全、威胁建模和安全评审。它是应用安全(AppSec)的决策层,而不是通用后端或基础设施加固。
适用时机
- 评审或设计认证、会话、令牌或授权流程。
- 验证输入处理、文件上传、渲染和不可信数据边界。
- 保护 API、Webhook、浏览器应用和管理界面。
- 对某个功能或 AppSec 架构选择进行威胁建模。
- 加固依赖、构建、制品和发布路径。
- 从 AppSec 角度评审智能体或 MCP 连接的应用。
何时应转其他技能
- 无安全重点的通用后端工程:使用 software-backend。
- 基础设施加固、IAM、集群策略或云安全态势:使用 ops-devops-platform。
- 智能合约专项审计:使用 software-crypto-web3。
- 安全测试工具与覆盖率(SAST/DAST、LLM/智能体测试套件):使用 qa-security-testing。
- ML 流水线或模型运维治理:使用 ai-mlops。
- 仅涉及合规解释而无实现选择:交由法务或合规相关方。
- 已发布二进制、APK/IPA、Electron/ASAR、固件的逆向工程或反编译:本库不负责,应使用 morluto/rea (MIT) 的上游 REA 技能与 MCP 服务器。
主要能力与默认选择
默认标准:OWASP Top 10 用于风险框定,ASVS 用于需求深度,NIST SSDF 用于 SDLC 基线;选用时应阅读发布方页面、记录所采用的版本与状态,并区分草案与最终标准(涉及 OWASP Top 10、ASVS、SSDF、SLSA、NIST 数字身份、WebAuthn、OWASP GenAI;CRA 适用性见 supply-chain-security.md)。在可行时优先使用 passkeys,浏览器优先的应用使用会话,先建立信任边界模型再选择控制措施,在智能体系统中将工具调用、检索内容与长期记忆视为不可信输入。
认证模型选择(对照表要点):
- 面向浏览器用户、可接受会话状态:选择服务端会话(Cookie + 服务端存储),避免用 JWT 做会话(撤销困难)。
- 具备设备原生生物识别的移动/桌面应用:选择 passkeys (WebAuthn),避免短信 OTP(SIM 卡交换风险)。
- 第三方登录或委托访问:身份用 OIDC,委托访问用 OAuth 授权码流程 + PKCE;避免隐式流程,并应用 RFC 9700 安全指引。
- 无用户上下文的 API 到 API:mTLS 或短期签名令牌,避免长期 API 密钥。
- 可信集群内服务间认证:服务账号 + mTLS,避免共享密钥或用户令牌。
输入控制选择(对照表要点):
- SQL 查询构造:参数化查询或 ORM 绑定,绝不字符串拼接。
- Shell/进程执行:使用允许列表参数,避免 shell=True 或对用户输入使用 exec。
- HTML 渲染:上下文感知的输出编码 + CSP 头。
- 文件上传目标路径:规范化、拒绝路径穿越序列、存储在 webroot 之外。
- 重定向目标:允许列表已知来源,拒绝开放重定向模式。
- LDAP/XPath/XML:构造查询前使用库级转义或模式校验。
- LLM/智能体工具调用输入:视为不可信,执行前校验模式,记录意图与范围。
核心决策要点:授权默认拒绝、在服务端检查授权、在边界校验、对危险汇聚点参数化、把富内容和文件上传视为活动内容;威胁建模应覆盖敏感数据存储、特权操作、外部回调、文件上传、富渲染、智能体或工具流程。
智能体与 MCP 安全:需显式建模提示注入、工具误用、记忆污染、跨租户泄漏、过宽的服务器能力、不安全审批流;只读与变更能力要分离,并记录意图、范围与结果;不得让单一上下文同时组合不可信内容、私有数据和外泄或变更通道。
计量或昂贵操作(单一来源设计模式):对任何消耗有限配额、花费金钱或其他昂贵/不可逆的智能体操作,应在该具体调用前重新检查当前授权与配额状态,而不是依赖更早的缓存检查;应用用户授权的预算与操作范围,当调用将超出这些范围或授权要求每次调用确认时,请求新的确认;运行中途失败时应从已保存状态恢复而非重启,因为重启会重新产生计量成本。
供应链与发布完整性:使用锁文件、可信发布或来源证明、制品完整性检查、必要时的 SBOM,并对传递依赖风险进行显式评审。
使用方式
该技能提供了按任务查找参考文档的快速索引(Risk-category framing、Auth and authorization choices、Input handling、Secure design and threat modeling、API 与供应链安全、密码学标准、智能体/LLM/MCP 应用设计、移动安全模板、秘密存储选择、事件响应与安全项目框定)。工作流程为:识别资产、信任边界、攻击者能力与失败后果;将问题分类(认证、授权、不可信输入、API、供应链、智能体流程或安全设计);从相关参考中选择控制族;应用具体防护措施并定义验证深度;在给出最终建议前重新核对易变的标准与提供商行为。
使用 AI 评审员进行自我审计时的范围界定:说明团队拥有代码且目标是修复;每次只评审一个模块或信任边界;先运行静态工具(SAST、依赖审计、秘密扫描),再让评审员对照真实代码路径研判其输出;要求修复方案与安全复现,而非漏洞利用载荷;避免对整个仓库使用“找出所有漏洞”这类提示。
秘密存储选择(对照表要点,选用前须核对提供商当前行为):
- Cloudflare Workers:使用 wrangler secret put 作为 Secret 绑定而非普通 vars 绑定。
- Vercel:使用 Secret 环境变量,确认当前的只写选项与环境范围;可读的 Config 值可能仍处于加密状态。
- GitHub Actions:使用仓库/组织 Secrets,限制工作流与环境访问,凭证不得放入工作流 env: 字面量或仓库 Variables。
- AWS:Secrets Manager 或 SSM SecureString,限制解密/读取权限;授权客户端可获取明文。
- Kubernetes:配置了静态加密的 Secret;仅 Base64 不是加密,限制 API 与 Pod 创建权限。
秘密存储用于 API 密钥、签名密钥、密码和 webhook 秘密;公开标识符放在普通配置中。多行值优先使用受保护文件或提供商 CLI 输入,并通过授权的测试验证精确字节而不打印值。若凭证暴露给未授权读者,应在签发方吊销并轮换、删除暴露副本、验证替代凭证的范围。
验证清单要求:对每个安全发现,识别攻击者能力、可达入口点、信任边界穿越、汇聚点与具体影响;区分已确认的利用路径、纵深防御缺口与未验证假设;提供安全复现或代码路径追踪及最小可行修复;严重性取决于可利用性与影响,而不是仅凭存在可疑 API。定稿前需逐项确认:信任边界已明确绘制、认证模型按默认顺序选择、授权在服务端检查并默认拒绝、所有汇聚点已参数化、文件上传与富内容按活动内容处理、凭证使用提供商秘密存储并核验读取权限与范围、供应链控制到位、智能体流程已威胁建模、残余风险有记录、标准与浏览器行为声明已对照当前来源核实。
输出模式默认从以下之一选择:安全设计简报、安全评审、认证或 API 加固计划、智能体 AppSec 评审。
已知陷阱与反模式
陷阱包括:在架构与产品流程已定后才开始安全评审;混淆认证与授权;把文件上传、富文本、markdown 或检索到的工具内容当作被动数据;对只读与变更工具或 MCP 操作复用同一权限面;假设基础设施安全态势或托管平台可补偿薄弱的应用层控制设计;默认发布带 'unsafe-inline' 或 'unsafe-eval' 的 CSP。反模式包括:把标准状态当作长期不变而不核查;使用比应用需要更复杂的认证机制;在系统深处信任未校验输入;默认让工具或 MCP 权限过宽;在实现选择锁定后才附加安全;把基础设施态势与应用安全设计混为一谈。
导航与归属
在攻击者激励不确定时做控制优先级排序,加载 game-theory-applied.md;可用性权衡加载 reliability-theory-applied.md;横向信任边界加载 zero-trust-architecture.md;高级浏览器载荷或 .NET 加密集成加载 advanced-xss-techniques.md 或 dotnet-efcore-crypto-security.md;合约代码风险按 software-crypto-web3 交接并使用 assets/web3/crypto-security.md。需要来源查询时查阅 data/sources.json。应用后如遇到值得记住的模式、应避免的错误或意外领域事实,可通过 agents-skills-feedback-loop/scripts/append_learning.py 向 learnings.md 追加一条带日期的条目,不要修改 SKILL.md 本身。