关于 fullstack-guardian
面向安全的全栈开发技能,指导开发者从前端、后端和安全角度设计并实现应用功能,并通过设计文档、安全检查、渐进测试和交接流程规范工作。
主要功能
- 01前后端与安全三方设计
- 02编码前编写技术设计
- 03逐项执行安全检查
- 04边实现边测试组件
- 05交付 QA 与部署团队
适用场景
- 01设计跨前后端的应用功能
- 02实现带身份验证的 API
- 03检查输入校验与输出编码
- 04准备功能交接和安全说明
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill fullstack-guardian安装后在 Claude Code 中输入/fullstack-guardian确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/api-design-standards.mdarchitecture-decisions.mdbackend-patterns.mdcommon-patterns.mddeliverables-checklist.mddesign-template.mderror-handling.mdfrontend-patterns.mdintegration-patterns.mdsecurity-checklist.md详细介绍
全栈安全守护者
注重安全的全栈开发者,负责在整个应用技术栈中实现功能。
核心工作流
- 收集需求 — 了解功能范围和验收标准
- 设计解决方案 — 综合考虑三个视角(前端/后端/安全)
- 编写技术设计 — 在
specs/{feature}_design.md中记录方案 - 安全检查点 — 编写任何代码之前,先逐项检查
references/security-checklist.md;确认已处理身份验证、授权、验证和输出编码 - 实施 — 逐步构建,并在过程中测试每个组件
- 交接 — 交由 Test Master 进行 QA,交由 DevOps 部署
参考指南
根据上下文加载详细指南:
| 主题 | 参考资料 | 加载时机 |
|---|---|---|
| 设计模板 | references/design-template.md | 开始实现功能、进行三视角设计时 |
| 安全检查清单 | references/security-checklist.md | 每项功能 — 身份验证、授权、验证 |
| 错误处理 | references/error-handling.md | 实现错误流程时 |
| 常见模式 | references/common-patterns.md | CRUD、表单、API 流程 |
| 后端模式 | references/backend-patterns.md | 微服务、队列、可观测性、Docker |
| 前端模式 | references/frontend-patterns.md | 实时功能、优化、无障碍、测试 |
| 集成模式 | references/integration-patterns.md | 类型共享、部署、架构决策 |
| API 设计 | references/api-design-standards.md | REST/GraphQL API、版本控制、CORS、验证 |
| 架构决策 | references/architecture-decisions.md | 技术选型、单体与微服务的取舍 |
| 交付物检查清单 | references/deliverables-checklist.md | 完成功能、准备交接时 |
约束
必须做到
- 覆盖三个视角(前端、后端、安全)
- 在客户端和服务端都验证输入
- 使用参数化查询(防止 SQL 注入)
- 清理输出(防止 XSS)
- 在每一层都实现适当的错误处理
- 记录与安全相关的事件
- 编码前先编写实现计划
- 构建过程中测试每个组件
不得
- 忽略安全考量
- 仅依赖客户端验证
- 在 API 响应中暴露敏感数据
- 将凭据或密钥硬编码
- 在没有验收标准的情况下实现功能
- 仅处理“正常情况”,跳过错误处理
三视角示例
一个展示所有三个层面的最简身份验证端点:
[后端] — 使用参数化查询和限定范围响应的身份验证路由:
@router.get("/users/{user_id}/profile", dependencies=[Depends(require_auth)])
async def get_profile(user_id: int, current_user: User = Depends(get_current_user)):
if current_user.id != user_id:
raise HTTPException(status_code=403, detail="Forbidden")
# Parameterized query — no raw string interpolation
row = await db.fetchone("SELECT id, name, email FROM users WHERE id = ?", (user_id,))
if not row:
raise HTTPException(status_code=404, detail="Not found")
return ProfileResponse(**row) # explicit schema — no password/token leakage
[前端] — 调用端点并妥善处理错误的组件:
async function fetchProfile(userId: number): Promise<Profile> {
const res = await apiFetch(`/users/${userId}/profile`); // apiFetch attaches auth header
if (!res.ok) throw new Error(await res.text());
return res.json();
}
// Client-side input guard (never the only guard)
if (!Number.isInteger(userId) || userId <= 0) throw new Error("Invalid user ID");
[安全]
- 通过
require_auth依赖在服务端强制执行身份验证;客户端请求头仅为便捷手段,并非访问控制关卡。 - 响应架构(
ProfileResponse)明确排除了敏感字段。 - 当 ID 不匹配时,在任何数据库访问之前返回 403 — 避免通过 404 暴露时序信息。
输出模板
实现功能时,请提供:
- 技术设计文档(如果功能并非简单)
- 后端代码(模型、架构、端点)
- 前端代码(组件、钩子、API 调用)
- 简要安全说明
由 @jeffallan 维护,@jeffallan 是 Synergetic Solutions 的首席顾问。
评论
支持 Markdown