flawopen.com/Injection SQL en JavaScript/Prisma
Prisma $queryRaw protège-t-il contre les injections SQL ?
Voyez un paramètre comme un champ scellé dans un formulaire SQL : la base traite la valeur comme une donnée, pas comme de la syntaxe. Le tagged template $queryRaw lie les valeurs interpolées. $queryRawUnsafe peut aussi lier des valeurs si vous fournissez des placeholders et des arguments ; le risque apparaît lorsque du texte non fiable est concaténé pour construire le SQL. Aucune de ces méthodes ne paramètre les noms de table ou de colonne.
const userId = request.query.userId;
const query =
`SELECT id FROM users WHERE id = ${userId}`;
const rows = await prisma.$queryRawUnsafe(query);
const rows = await prisma.$queryRaw`
SELECT id FROM users WHERE id = ${userId}
`;
// PostgreSQL example: $1 binds data, not an identifier.
const columns = { name: 'name', created: 'created_at' } as const;
const column = columns[requestedSort as keyof typeof columns] ?? 'created_at';
const pageSize = 25;
const sortedRows = await prisma.$queryRawUnsafe(
`SELECT id FROM users ORDER BY ${column} LIMIT $1`,
pageSize
);
// The selected SQL structure comes from a fixed map.
Ce que font les paramètres Prisma — et leurs limites
Avec $queryRaw, utilisez directement l’appel tagged template : chaque valeur interpolée devient un paramètre de la base. Ne construisez pas d’abord une chaîne SQL à transmettre comme seul argument. Prisma accepte aussi des placeholders avec $queryRawUnsafe(query, ...values) ; les valeurs peuvent ainsi être liées, mais le texte SQL doit rester fiable. Les paramètres représentent des données, pas des identifiants, opérateurs ou fragments SQL. Associez toute colonne sélectionnable à une allowlist fixe contrôlée par l’application. Prisma recommande TypedSQL pour de nombreux cas de requêtes raw typées.
Auditer les requêtes raw Prisma
grep -rn "\$queryRawUnsafe\|\$executeRawUnsafe" --include="*.ts" --include="*.js" .FAQ
Cette méthode accepte du SQL raw et des placeholders si les valeurs sont transmises séparément. Sa flexibilité facilite la construction de chaînes dangereuses : examinez ensemble le texte SQL et les arguments. Elle ne sécurise pas les identifiants dynamiques ; choisissez-les dans une allowlist fixe.
Références
- Documentation Prisma ORM — Requêtes raw et prévention des injections SQL
- Documentation Prisma ORM — TypedSQL
- Documentation Prisma — Accès raw à la base de données
- flawopen.com — Injection SQL en JavaScript