FlawOpen

flawopen.com/JavaScript में SQL Injection/TypeORM

क्या TypeORM QueryBuilder SQL Injection से सुरक्षित है?

संदर्भ मार्गदर्शिका
संक्षिप्त उत्तर

बँधा हुआ parameter फ़ॉर्म के नामांकित मान-खाने जैसा है: TypeORM मान अलग भेजता है, इसलिए वह SQL निर्देश नहीं बल्कि डेटा रहता है। QueryBuilder अलग दिए गए नामित parameters को bind करता है। Condition में input interpolate करने पर वह फिर SQL text बन जाता है।

असुरक्षित — input को SQL में interpolate करना
userRepo.createQueryBuilder("u")
  .where(`u.id = ${userId}`)
  .getOne()
सुरक्षित — मान अलग से bind करें
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' .

अक्सर पूछे जाने वाले प्रश्न

क्या TypeORM Repository के find methods हमेशा सुरक्षित हैं?

सामान्य find options मानों को TypeORM query construction से गुज़ारते हैं, लेकिन custom operators, raw SQL expressions और application द्वारा बनाई strings की जाँच करें। Parameterization syntax injection रोकता है, रिकॉर्ड तक पहुँच की अनुमति या मान का business अर्थ सत्यापित नहीं करता।

स्रोत

यह भी देखें SQL इंजेक्शन (CWE-89): यह कैसे काम करता है और हर भाषा में इसे कैसे रोकें — flawopen.com Django ORM और SQL Injection: सुरक्षित तरीके Doctrine ORM में SQL Injection: सुरक्षित queries EF Core FromSqlRaw: सुरक्षित पैरामीटरयुक्त SQL FastAPI SQL इंजेक्शन: Pydantic क्या रोकता है और क्या नहीं GORM Raw SQL: Go में SQL injection रोकें क्या Quotes Escape करना SQL Injection रोकने के लिए काफ़ी है?