flawopen.com/JavaScript में SQL Injection/TypeORM
क्या TypeORM QueryBuilder SQL Injection से सुरक्षित है?
बँधा हुआ parameter फ़ॉर्म के नामांकित मान-खाने जैसा है: TypeORM मान अलग भेजता है, इसलिए वह SQL निर्देश नहीं बल्कि डेटा रहता है। QueryBuilder अलग दिए गए नामित parameters को bind करता है। Condition में input interpolate करने पर वह फिर SQL text बन जाता है।
userRepo.createQueryBuilder("u")
.where(`u.id = ${userId}`)
.getOne()
userRepo.createQueryBuilder("u")
.where("u.id = :id", { id: userId })
.getOne()
मान bind करें; query संरचना सीमित करें
QueryBuilder.where() :id जैसे नामित placeholders वाली condition और अलग parameters object स्वीकार करता है। अलग मानों के लिए अलग नाम रखें; TypeORM चेतावनी देता है कि वही नाम दोबारा देने पर मान बदल सकता है। User input को condition में interpolate न करें। dataSource.query() जैसे raw methods driver-specific placeholders और अलग दिए गए मान भी स्वीकार करते हैं। Parameters डेटा bind करते हैं, table या column names, sort direction या मनमाने SQL नहीं। चुनी जाने वाली संरचना को application के निश्चित expressions से map करें।
TypeORM query निर्माण की जाँच
rg -n '(\.where\(|\.query\(|\.sql)' --glob '*.ts' .अक्सर पूछे जाने वाले प्रश्न
सामान्य find options मानों को TypeORM query construction से गुज़ारते हैं, लेकिन custom operators, raw SQL expressions और application द्वारा बनाई strings की जाँच करें। Parameterization syntax injection रोकता है, रिकॉर्ड तक पहुँच की अनुमति या मान का business अर्थ सत्यापित नहीं करता।
स्रोत
- TypeORM दस्तावेज़ — DataSource raw queries और parameters
- OWASP — SQL Injection रोकथाम मार्गदर्शिका
- TypeORM दस्तावेज़ — Select QueryBuilder और parameters
- flawopen.com — JavaScript में SQL Injection