关于 secure-coding
secure-coding 是面向开发者和代码审查者的安全编码技能,提供多种语言、Web 框架及 Terraform 的针对性参考。它引导按技术栈选择指南,并将安全建议应用于具体改动或审查发现。
主要功能
- 01覆盖多种语言与 Web 框架
- 02按技术栈加载对应安全指南
- 03提供常见漏洞与安全模式参考
- 04通过审查清单检查代码改动
- 05为未覆盖技术栈说明类比依据
适用场景
- 01审查 Web 端点的输入与授权处理
- 02为框架代码选择安全实现模式
- 03检查文件上传、序列化或秘密配置风险
- 04审计 Terraform 基础设施配置
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ securityreviewai/ secure-coding-skill --skill secure-coding安装后在 Claude Code 中输入/secure-coding确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/angular.mdaspnet.mdc.mdcpp.mdcsharp.mdgo.mdjava-spring.mdpython-django.mdpython-fastapi.mdpython-flask.mdreact.mdruby-on-rails.mdterraform.mdtypescript.mdvue.md详细介绍
安全编码
这是一项用于在常见 Web 框架中编写和审查安全代码的技能。每个框架都有惯用的安全模式和典型陷阱;通用的 OWASP 建议并不足够——应采用针对框架的指导。
适用场景
在使用以下任一语言或框架时,触发此技能:
| 参考文件 | 语言 / 框架 |
|---|---|
references/java-spring.md | Java Spring / Spring Boot |
references/python-django.md | Python Django |
references/python-flask.md | Python Flask |
references/python-fastapi.md | Python FastAPI |
references/ruby-on-rails.md | Ruby on Rails |
references/react.md | React(包括 Next.js) |
references/vue.md | Vue(包括 Nuxt) |
references/angular.md | Angular |
references/go.md | Go(net/http、Gin、Echo、Fiber、Chi) |
references/aspnet.md | ASP.NET(Core、MVC、Web API、Razor、Blazor) |
references/c.md | C(C99–C23、系统 / 嵌入式 / 内核相关) |
references/cpp.md | C++(C++17/20/23) |
references/typescript.md | TypeScript(Node/Express/NestJS/Fastify/Deno/Bun + 共享前端) |
references/csharp.md | C# 语言(非 Web 场景——控制台、服务、桌面应用、库) |
references/terraform.md | Terraform / OpenTofu(AWS、Azure、GCP IaC) |
工作流
- 确定涉及的语言 / 框架。 查看
package.json、tsconfig.json、pom.xml、build.gradle、requirements.txt、Pipfile、pyproject.toml、Gemfile、go.mod、*.csproj、*.sln、Makefile/CMakeLists.txt、*.tf/*.tfvars,或当前文件中的导入和扩展名。如果涉及多种技术(例如,使用 Django 后端、通过 Terraform 部署的 React+TypeScript 前端),则加载每个相关参考文件。 - 仅加载相关的参考文件。 每个参考文件都是独立的,涵盖该框架最常见的安全陷阱和惯用安全模式。
- 将指导应用于具体改动。 不要把完整清单一股脑贴进 PR——只关注改动实际涉及的类别(例如,新增一个接受 JSON 的端点:输入验证、身份验证 / 授权、输出编码;新增文件上传:存储路径、内容类型、大小限制)。
- 审查代码时,按照参考文件中的“审查清单”逐行检查改动,并指出具体问题及其文件:行号,同时给出建议的修复方案。
- 编写新代码时,优先采用参考文件中的“安全模式”代码片段,而不是自行发明写法。
每个参考涵盖的内容
Web 框架参考(Spring、Django、Flask、FastAPI、Rails、React、Vue、Angular、Go、ASP.NET)均围绕相同类别编排:
- 注入 — SQL、NoSQL、命令、LDAP、模板、标头注入
- 身份验证 / 权限控制 — 登录流程、会话 / Cookie 配置、密码存储、角色检查、IDOR
- CSRF — 适用场景、框架默认设置,以及意外禁用防护的常见方式
- XSS / 输出编码 — 自动转义默认设置,以及如何安全或危险地绕过转义
- CORS — 限制性默认设置、常见错误配置
- 密钥与配置 — 密钥应存放和不应存放的位置、框架特定的配置陷阱
- 加密 — 框架提供的功能,以及应避免自行实现的内容
- 文件上传与路径遍历 — 安全存储、内容类型处理、文件名净化
- 反序列化 — 安全解析器、危险格式(Pickle、Marshal、BinaryFormatter、ObjectInputStream、YAML.load)
- SSRF — 出站 HTTP 调用、URL 抓取器、Webhook
- 安全标头 — CSP、HSTS、X-Frame-Options、Referrer-Policy、框架特定的辅助工具
- 日志记录与错误处理 — 应记录的内容、不应记录的内容(PII、密钥、令牌)、堆栈跟踪泄露
- 依赖项 — 已知存在问题的版本、安全公告数据库链接、升级路径
- 框架特定的易错点 — 即使经验丰富的开发者也容易中招的问题
语言参考重点关注超越框架范畴的问题:
- C / C++ — 内存安全(缓冲区 / 堆溢出、UAF、重复释放)、整数溢出 / 下溢、格式字符串、字符串 / 路径 API、TOCTOU、通过
system/exec实现的命令注入、加密库使用、编译器加固(-D_FORTIFY_SOURCE、栈保护、ASAN/UBSAN/模糊测试) - TypeScript — 类型安全仅在编译时有效,在信任边界处进行运行时验证(Zod/Valibot/class-validator)、严格的
tsconfig.json、any与unknown的区别、Node 特定主题(Express/NestJS/Fastify 中间件、原型污染、eval/vm/Function(str)、供应链) - C#(非 Web) —
Process.Start参数处理、加密 API 使用(RNG、哈希、AEAD)、序列化风险(BinaryFormatter、Newtonsoft.JsonTypeNameHandling)、XML 实体加固、清除密钥、HttpClientTLS、反射 /CSharpScriptRCE 攻击面、ReDoS - Terraform —
.tf/ 状态文件中的密钥、公共资源错误配置(S3、安全组、防火墙)、IAM 通配符和信任策略Condition块、静态 / 传输加密默认设置、模块 / 提供程序固定版本、危险的配置器、CI 中的策略即代码(tfsec、checkov、trivy config)
如何使用这些参考
- 对于专项任务(例如,“审查此登录控制器”),加载一个参考并搜索相关章节。
- 对于全面审查(例如,“审计此 Spring Boot 服务”),加载该参考,并按照末尾的完整检查清单逐项检查。
- 对于多技术栈应用(例如,React + FastAPI),同时加载两个参考——前端和后端的安全问题很少完全重合(CSRF、CORS 和身份验证令牌存储都处于两者交界处)。
审查结果的格式
审查代码时,按以下格式组织发现:
[Severity] <Category> — <file>:<line>
What: <one-sentence description of the issue>
Why it matters: <concrete impact>
Fix: <minimal code change or pattern reference from the framework guide>
严重性级别:严重(RCE、绕过身份验证、大规模数据泄露)/ 高(权限提升、IDOR、存储型 XSS)/ 中(反射型 XSS、状态变更时的 CSRF、信息泄露)/ 低(缺少纵深防御、加固不足)。
不要用通过检查的项目凑报告篇幅——只列出错误、缺失项以及应采取的措施。
当语言/框架不在列表中时
如果用户使用的语言或框架未涵盖在列表中(例如 Rust、Kotlin、Phoenix、Laravel、NestJS、Pulumi、CloudFormation),请套用最接近的类比,并明确告知用户这是推断,以便他们核实框架特定的行为。大致类比如下:
- Rust ≈ C/C++(适用于不安全代码块/FFI);其他情况下默认内存安全——重点关注
unsafe、加密 crate 的使用(RustCrypto / ring)以及 Web 框架的具体情况(Axum/Actix)。 - Kotlin (JVM) ≈ Spring Boot / Ktor 对应的
java-spring.md;存在与 Java 相同的加密和序列化陷阱。 - NestJS ≈ 语言层对应的
typescript.md+angular.md风格的 DI/装饰器模式。 - Phoenix (Elixir) ≈
ruby-on-rails.md——默认设置类似(CSRF 保护、参数绑定),但习惯用法不同。 - Laravel (PHP) ≈
ruby-on-rails.md——MVC 模式和约定优于配置的安全默认设置较为相似。 - Pulumi / CloudFormation / Bicep ≈
terraform.md——IaC 方面的关注点相同(机密、状态、公有资源、IAM)。
评论
支持 Markdown