Perufitlife/nhost-security-skill

GitHub: Perufitlife/nhost-security-skill

针对 Hasura/Nhost 的权限安全审计工具,自动检测并主动验证 GraphQL 层面的匿名访问和行级过滤配置失误。

Stars: 1 | Forks: 0

# Nhost / Hasura 安全审计工具 [![npm](https://img.shields.io/npm/v/nhost-security?color=red)](https://www.npmjs.com/package/nhost-security) ![license](https://img.shields.io/badge/license-MIT-green) ![node](https://img.shields.io/badge/node-%3E%3D18-blue) ## 为什么会有这个项目 Hasura 的权限模型非常强大,但也很容易被设置得过于宽松。我最常看到的模式包括: - **`anonymous` 角色拥有开放的 SELECT 权限** — 任何未经身份验证的请求都可以查询该表。这通常是本地开发阶段遗留下来的。 - **`user` 角色的过滤器为空 `{}`** — 任何注册用户都可以读取/更新/删除所有行,完全忽略了所有权归属。通常应该设置为 `{ user_id: { _eq: "X-Hasura-User-Id" } }`。 - **SELECT 权限暴露了所有列** — 暴露了该角色实际上并不需要的敏感列(例如 password_hash、internal_notes)。 - **Public schema 的内省** — 任何人都可以在无需身份验证的情况下摸清你的整个数据模型和权限结构。 ## 安装与运行 ``` HASURA_ENDPOINT=https://my.hasura.app \ HASURA_ADMIN_SECRET=$ADMIN_SECRET \ npx nhost-security --html report.html ``` 对于 Nhost 项目,端点地址为 `https://.hasura..nhost.run`。 ## 检查内容 | # | 检查项 | 严重程度 | |---|---|---| | 1 | `anonymous` 角色拥有开放的 SELECT 权限 | **CRITICAL** | | 2 | `anonymous` 角色拥有 INSERT/UPDATE/DELETE 权限 | **CRITICAL** | | 3 | `user` 角色在没有行级过滤器的情况下拥有 SELECT/UPDATE/DELETE 权限 | HIGH | | 4 | 权限暴露了所有列(无允许列表) | MEDIUM | | 5 | 匿名用户开启了 GraphQL 内省 | MEDIUM | ## 主动探测 对于每一个可疑的匿名 SELECT 权限,审计工具会发送一个匿名的 GraphQL 查询(`{ (limit: 1) { __typename } }`),如果返回了数据行,就会报告 `confirmed: true`。对于内省探测,会发送 `{ __schema { queryType { name } } }`,并报告匿名用户是否可以读取该 schema。 `--no-probe` 参数可以禁用实时拉取。 ## 许可证与源码 MIT。开源地址:https://github.com/Perufitlife/nhost-security-skill 针对 Supabase,请访问 https://github.com/Perufitlife/supabase-security-skill 针对 PocketBase,请访问 https://github.com/Perufitlife/pocketbase-security-skill 针对 Appwrite,请访问 https://github.com/Perufitlife/appwrite-security-skill ## 集成模式参考 请参阅 [`rotatepilot-skyx-sandbox`](https://github.com/Perufitlife/rotatepilot-skyx-sandbox),查看合作伙伴如何在单个静态页面中使用我们的公共 REST API 的在线演示 —— 该项目建于 2026 年 5 月 12 日,旨在响应一个航空平台的合作引入。我们同样采用了这种 JSON 契约 / CORS / 边缘服务的方法来用于 `nhost-security` 集成。 ## 姊妹 AI 文本工具 如果你的团队使用 AI 撰写外联信息、PR 描述或社交媒体帖子,[aitells](https://aitells.vercel.app) 生态系统可以在它们发布之前捕捉到 AI 痕迹: - [`@perufitlife/aitells-mcp`](https://www.npmjs.com/package/@perufitlife/aitells-mcp) — 适用于 Claude Code / Cursor 的 MCP 服务器。将 `detect_ai_tells` 和 `humanize_text` 作为原生工具使用。 - [`Perufitlife/aitells-action`](https://github.com/Perufitlife/aitells-action) — GitHub Action,用于扫描 PR 标题/正文/提交记录中的 AI 模式,并会发布友好的摘要评论。 - [aitells.vercel.app](https://aitells.vercel.app) — 免费检测工具 + $19 终身人性化服务(限前 100 名买家)
标签:API安全, CISA项目, GNU通用公共许可证, GraphQL, GraphQL内省, Hasura, JSON输出, MITM代理, Nhost, Node.js, npx, 匿名探测, 安全合规, 开源安全工具, 暗色界面, 未授权访问, 权限审计, 网络代理, 网络安全, 自定义脚本, 行级安全, 角色权限配置, 足迹分析, 逆向工程平台, 隐私保护