flawopen.com/JavaScript में SQL Injection/Sequelize
क्या Sequelize query() SQL Injection से सुरक्षित है?
Query parameter सीलबंद मान-कार्ड जैसा है: SQL को मान query निर्देशों से अलग मिलता है। Sequelize v6 में bind मान अलग भेजता है; replacements भेजने से पहले मान को escape करके जोड़ता है। अविश्वसनीय input से query string बनाने पर दोनों उपाय bypass हो जाते हैं। कोई भी table या column name का विकल्प नहीं है।
sequelize.query(
`SELECT * FROM users WHERE id = ${userId}`
)
sequelize.query(
"SELECT id FROM users WHERE id = $id",
{ bind: { id: userId },
type: QueryTypes.SELECT }
)
मानों को SQL syntax से अलग रखें
Sequelize v6 में replacements को Sequelize डेटाबेस तक पहुँचने से पहले escape करके जोड़ता है; bind मानों को SQL text से अलग भेजता है। दोनों user values जोड़ने से बचाते हैं, लेकिन syntax method और dialect के अनुसार बदलती है। Parameters table names, column names, sort direction या मनमाने SQL fragments नहीं हो सकते। चुनी जाने वाली संरचना को application की fixed allowlist से map करें। Model methods सामान्य structured मान संभाल सकते हैं, लेकिन raw SQL और literal expressions की भी जाँच करें।
Sequelize query निर्माण की जाँच
rg -n 'sequelize\.query\(|Sequelize\.literal\(' --glob '*.{js,ts,mjs,cjs}' .अक्सर पूछे जाने वाले प्रश्न
सामान्य structured values को Sequelize query construction संभालता है। फिर भी raw SQL, literal expressions और application द्वारा बनाई गई strings जाँचें। Parameterization रिकॉर्ड तक पहुँच की अनुमति या business rules का सत्यापन नहीं करता।
स्रोत
- Sequelize v6 दस्तावेज़ — Raw Queries, replacements और bind parameters
- OWASP — SQL Injection रोकथाम मार्गदर्शिका
- flawopen.com — JavaScript में SQL Injection