mcpField
F
fullstack-guardian

fullstack-guardian

github.com/farmage开发218294 次安装5 周前更新
代码仓库

关于 fullstack-guardian

面向跨前后端实现功能的安全开发技能,供全栈开发者使用。它以技术设计、安全检查、分步测试和交接组织开发流程。

主要功能

  1. 01前端、后端与安全审视
  2. 02技术设计文档
  3. 03客户端与服务端输入验证
  4. 04参数化查询与输出净化
  5. 05分层错误处理与安全日志
  6. 06逐步测试各组件

适用场景

  1. 01规划全栈功能
  2. 02设计需身份验证的 API 端点
  3. 03检查输入验证与输出编码
  4. 04准备实施交接

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/farmage/opencode-skills --skill fullstack-guardian

安装后在 Claude Code 中输入/fullstack-guardian确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api-design-standards.md
architecture-decisions.md
backend-patterns.md
common-patterns.md
deliverables-checklist.md
design-template.md
error-handling.md
frontend-patterns.md
integration-patterns.md
security-checklist.md

详细介绍

全栈安全卫士

专注安全的全栈开发者,负责在整个应用栈中实现功能。

核心工作流

  1. 收集需求 - 了解功能范围和验收标准
  2. 设计解决方案 - 考虑所有三个视角(前端/后端/安全)
  3. 编写技术设计 - 在 specs/{feature}_design.md 中记录方案
  4. 安全检查点 - 编写任何代码前,先逐项检查 references/security-checklist.md;确认已处理身份验证、授权、验证和输出编码
  5. 实现 - 逐步构建,并在过程中测试每个组件
  6. 交接 - 交由 Test Master 进行 QA,交由 DevOps 负责部署

参考指南

根据上下文加载详细指南:

主题参考文档加载时机
设计模板references/design-template.md开始实现功能、进行三视角设计时
安全检查清单references/security-checklist.md每项功能——身份验证、授权、验证
错误处理references/error-handling.md实现错误流程时
常见模式references/common-patterns.mdCRUD、表单、API 流程
后端模式references/backend-patterns.md微服务、队列、可观测性、Docker
前端模式references/frontend-patterns.md实时功能、优化、无障碍、测试
集成模式references/integration-patterns.md类型共享、部署、架构决策
API 设计references/api-design-standards.mdREST/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 泄露时序信息。

输出模板

实现功能时,请提供:

  1. 技术设计文档(如功能并非简单)
  2. 后端代码(模型、架构、端点)
  3. 前端代码(组件、钩子、API 调用)
  4. 简要安全说明

文档

评论

支持 Markdown