flawopen.com/Injection SQL en JavaScript/TypeORM
Le QueryBuilder TypeORM protège-t-il contre les injections SQL ?
Un paramètre lié ressemble à un champ étiqueté sur un formulaire : TypeORM transmet la valeur séparément, comme une donnée et non une instruction SQL. QueryBuilder lie les paramètres nommés transmis séparément. Interpoler une entrée dans la condition la transforme de nouveau en texte SQL.
userRepo.createQueryBuilder("u")
.where(`u.id = ${userId}`)
.getOne()
userRepo.createQueryBuilder("u")
.where("u.id = :id", { id: userId })
.getOne()
Lier les valeurs ; contrôler la structure de la requête
QueryBuilder.where() accepte une condition avec des placeholders nommés, comme :id, et un objet de paramètres séparé. Utilisez des noms distincts pour des valeurs distinctes ; TypeORM avertit qu’un nom réutilisé peut écraser sa valeur. N’interpolez pas l’entrée utilisateur dans la condition. Les méthodes raw comme dataSource.query() acceptent aussi des placeholders propres au pilote avec les valeurs séparées. Les paramètres lient des données, pas les noms de tables ou colonnes, l’ordre de tri ni du SQL arbitraire. Associez la structure sélectionnable à des expressions fixes de l’application.
Auditer la construction des requêtes
rg -n '(\.where\(|\.query\(|\.sql)' --glob '*.ts' .FAQ
Les options find courantes transmettent les valeurs via la construction des requêtes TypeORM ; vérifiez toutefois les opérateurs personnalisés, expressions SQL brutes et chaînes assemblées par l’application. Le paramétrage prévient l’injection syntaxique, pas l’accès non autorisé ni les erreurs de validation métier.
Références
- Documentation TypeORM — requêtes raw DataSource et paramètres
- OWASP — Prévention des injections SQL
- Documentation TypeORM — QueryBuilder de sélection et paramètres
- flawopen.com — Injection SQL en JavaScript