跳转到正文
报告库
用途分类 / 数据分析

Prisma Client API Skill 安全审计

作者说它能做什么(原文)

Prisma Client API reference covering model queries, filters, operators, and client methods. Use when writing database queries, using CRUD operations, filtering data, or configuring Prisma Client. Triggers on "prisma query", "findMany", "create", "update", "delete", "$transaction".

第三方安全检查结论

发现安全风险

已检查文件
9
发现的风险
3
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。发现 1 项风险
中风险

动态标识符和 Unsafe API 可在输入边界错误时执行注入的 SQL

原文依据:3 处
发现了什么

参考资料展示 Prisma.raw(column) 和 $queryRawUnsafe。文档确实警告前者不能用于用户输入,并把后者标为注入风险,但这些 API 本身不会安全转义动态 SQL 结构;代理若错误地把请求参数用于表名、列名或拼接语句,数据库会把注入内容当作 SQL 执行。

为什么需要注意

攻击者可能读取、修改或删除数据库中该连接账号有权访问的数据。

这段代码的正常用途

候选所述注入机制在误用时成立,但原文没有指示把不受信任输入传给这些 API。动态标识符示例使用固定字符串并明确说用户输入不安全;Unsafe 示例也标注仅限可信输入,随后把字符串拼接明确列为漏洞,并给出参数化写法。因此这是安全边界说明和反例,而非鼓励执行注入 SQL。用户仍可要求生成代码避免 `Prisma.raw()` 接收请求值,并优先使用参数化模板。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
references/raw-queries.md:25来自说明文档打开原文件
### Dynamic table/column namesUse `Prisma.raw()` for identifiers (not safe for user input):```typescriptimport { Prisma } from '../generated/client'const column = 'email'const users = await prisma.$queryRaw`  SELECT ${Prisma.raw(column)} FROM "User"````
查看另外 2 个位置
references/raw-queries.md:94来自说明文档打开原文件
## $queryRawUnsafe / $executeRawUnsafeFor fully dynamic queries (use with caution!):```typescript// ⚠️ SQL injection risk - only use with trusted inputconst table = 'User'const users = await prisma.$queryRawUnsafe(  `SELECT * FROM "${table}" WHERE id = $1`,  userId)```
references/raw-queries.md:117来自说明文档打开原文件
## SQL Injection Prevention### Safe (parameterized)```typescript// ✅ User input is parameterizedconst email = userInputconst users = await prisma.$queryRaw`  SELECT * FROM "User" WHERE email = ${email}````### Unsafe (concatenation)```typescript// ❌ SQL injection vulnerability!const email = userInputconst users = await prisma.$queryRawUnsafe(  `SELECT * FROM "User" WHERE email = '${email}'`)```
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。发现 2 项风险
中风险

查询事件示例会把全部查询参数写入控制台日志

原文依据:1 处
发现了什么

示例启用 query 事件后记录 e.params。参数内容取决于应用查询,可能包含邮箱、令牌、密码或其他个人数据;控制台通常会被日志平台、运维人员或共享诊断包读取。

为什么需要注意

敏感数据库输入可能被复制到保留时间更长、访问范围更广的日志系统中。

这是可选的文档示例,不会因安装 Skill 自动运行;但示例明确启用查询事件并把 `e.params` 输出到控制台。用户将其采用到真实应用时,查询参数可能进入集中日志或诊断包,暴露何种数据取决于实际查询。可要求作者提醒对参数脱敏,或限制生产环境记录参数。

references/client-methods.md:71来自说明文档打开原文件
```typescriptconst prisma = new PrismaClient({  adapter,  log: [{ level: 'query', emit: 'event' }]})prisma.$on('query', (e) => {  console.log('Query:', e.query)  console.log('Params:', e.params)  console.log('Duration:', e.duration, 'ms')})```
中风险

参考示例包含无筛选条件的全表删除

原文依据:1 处
发现了什么

deleteMany({}) 示例明确删除全部用户记录。虽然位于删除操作文档中,但若代理将其复制到真实数据库或把空筛选误认为安全默认值,会执行大范围、持久的数据删除。

为什么需要注意

可能清空整张表;能否恢复取决于备份、时间点恢复和事务边界。

这是 CRUD 参考中的示例,不是自动执行代码;但 `deleteMany({})` 被明确标注为删除全部记录。若代理按示例生成并在已连接的真实数据库上运行,所有用户行都可能被永久删除。用户可要求在执行前确认目标数据库、备份和非空筛选条件,并禁止未经明确授权的全表删除。

references/model-queries.md:214来自说明文档打开原文件
### deleteManyDelete multiple records:```typescriptconst result = await prisma.user.deleteMany({  where: { role: 'GUEST' }})// Returns { count: 5 }// Delete allconst result = await prisma.user.deleteMany({})```
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。未发现风险
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。未发现风险
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。未发现风险
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

8 个说明模块

该 Skill 是 Prisma Client 的参考资料,覆盖数据库连接、CRUD、筛选、关系、事务和原始 SQL;主文件要求代理按类别打开对应参考文件。

查看原文
SKILL.md:168来自说明文档打开原文件
## Rule FilesDetailed API documentation:```references/constructor.md        - PrismaClient constructor optionsreferences/model-queries.md      - CRUD operationsreferences/query-options.md      - select, include, omit, where, orderByreferences/filters.md            - Filter conditions and operatorsreferences/relations.md          - Relation queries and nested operationsreferences/transactions.md       - Transaction APIreferences/raw-queries.md        - $queryRaw, $executeRawreferences/client-methods.md     - $connect, $disconnect, $on, $extends```
SKILL.md:214来自说明文档打开原文件
## How to UsePick the category from the table above, then open the matching reference file for implementation details and examples.

数据库连接示例从 DATABASE_URL 环境变量读取凭据,并直接创建 PostgreSQL 适配器;实际查询会以该连接字符串授予的数据库权限运行。

查看原文
references/constructor.md:7来自说明文档打开原文件
```typescriptimport { PrismaClient } from '../generated/client'import { PrismaPg } from '@prisma/adapter-pg'const adapter = new PrismaPg({  connectionString: process.env.DATABASE_URL})const prisma = new PrismaClient({ adapter })```

内容既包含参数化原始 SQL 的安全示例,也明确标注字符串拼接会造成 SQL 注入;未发现要求绕过该警告、上传数据或安装/运行附带脚本的指令。

查看原文
references/raw-queries.md:117来自说明文档打开原文件
## SQL Injection Prevention### Safe (parameterized)```typescript// ✅ User input is parameterizedconst email = userInputconst users = await prisma.$queryRaw`  SELECT * FROM "User" WHERE email = ${email}````### Unsafe (concatenation)```typescript// ❌ SQL injection vulnerability!const email = userInputconst users = await prisma.$queryRawUnsafe(  `SELECT * FROM "User" WHERE email = '${email}'`)```
从这里开始 · 工作说明SKILL.md
prisma-client-api
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。 另有 5 个章节,可在原文件中查看。

文件引用关系图

8 处引用
哪些文件发起引用引用了什么
连线表示真实的文件引用,不是运行顺序。点击节点可高亮相关连线,并查看具体文件和原文位置。虚线表示还有文件需要定位。
文件与检查记录9 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • references/client-methods.md已纳入全文
  • references/constructor.md已纳入全文
  • references/filters.md已纳入全文
  • references/model-queries.md已纳入全文
  • references/query-options.md已纳入全文
  • references/raw-queries.md已纳入全文
  • references/relations.md已纳入全文
  • references/transactions.md已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • references/client-methods.md配套文件
  • references/constructor.md配套文件
  • references/filters.md配套文件
  • references/model-queries.md配套文件
  • references/query-options.md配套文件
  • references/raw-queries.md配套文件
  • references/relations.md配套文件
  • references/transactions.md配套文件

代码和说明中提到的操作

读取密钥或账号配置
SKILL.md:55来自说明文档打开原文件
const adapter = new PrismaPg({  connectionString: process.env.DATABASE_URL})
references/constructor.md:12来自说明文档打开原文件
const adapter = new PrismaPg({  connectionString: process.env.DATABASE_URL})
references/constructor.md:28来自说明文档打开原文件
const adapter = new PrismaPg({  connectionString: process.env.DATABASE_URL})
连接外部网站
SKILL.md:210来自说明文档打开原文件
- [Prisma Client API Reference](https://www.prisma.io/docs/orm/reference/prisma-client-reference)- [CRUD Operations](https://www.prisma.io/docs/orm/prisma-client/queries/crud)
SKILL.md:211来自说明文档打开原文件
- [Prisma Client API Reference](https://www.prisma.io/docs/orm/reference/prisma-client-reference)- [CRUD Operations](https://www.prisma.io/docs/orm/prisma-client/queries/crud)- [Filtering and Sorting](https://www.prisma.io/docs/orm/prisma-client/queries/filtering-and-sorting)
SKILL.md:212来自说明文档打开原文件
- [CRUD Operations](https://www.prisma.io/docs/orm/prisma-client/queries/crud)- [Filtering and Sorting](https://www.prisma.io/docs/orm/prisma-client/queries/filtering-and-sorting)
读取了多少行
2,172
文件校验值(用于核对版本)
9e1cfcbec3f8e131c6eb173561f59ff6f1afaa2041028c24d58bc942a9bed338