मुख्य सामग्री पर जाएँ

SaaS SQL injection prevention: parameterized queries और सुरक्षित data access

Parameterized queries, safe ORM patterns, allowlisted dynamic identifiers, least-privilege database accounts और regression tests से SaaS में SQL injection रोकें।

इस मार्गदर्शिका में

SQL injection क्या है और इसका मुख्य बचाव क्या है?

SQL injection तब होता है जब untrusted data को database command text के साथ इस तरह जोड़ा जाए कि database उसे query के हिस्से के रूप में समझने लगे। मुख्य बचाव prepared या parameterized query है, जो SQL structure को values से अलग रखती है। Input validation और database permissions अतिरिक्त सुरक्षा हैं, लेकिन string filters, quotes को खुद escape करना या errors छिपाना parameter binding का विकल्प नहीं।

Values को SQL में जोड़ने की बजाय bind करें

Filters, inserts, updates और deletes के values के लिए database driver, framework या ORM का parameter-binding API इस्तेमाल करें। Query structure स्थिर रखें और user values parameters के जरिए दें। Raw-query escape hatches की जाँच करें; string से SQL बनाने वाले code को ORM अपने-आप सुरक्षित नहीं करता।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

Dynamic table, column और sort विकल्प allowlist से लें

अधिकतर SQL libraries column name या sort direction जैसे identifiers को value की तरह bind नहीं कर सकतीं। Application code में user-facing विकल्पों को ज्ञात identifiers की fixed list से map करें और बाकी अस्वीकार करें। माँगा गया column या SQL fragment query में सीधे न जोड़ें।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

Stored procedure तभी सुरक्षित है जब वह भीतर parameters bind करे

Stored procedure भी vulnerable हो सकती है यदि वह input जोड़कर dynamic SQL बनाए और चलाए। उसकी implementation देखें और database boundary पर parameters bind करें। Input validation से अपेक्षित type, range और length लागू करें, लेकिन इसे query injection का मुख्य बचाव न मानें।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet
SQL query review worksheet
Route / queryUntrusted valueParameterized APIDynamic identifier allowlistDatabase role / test
Search या filter
Export या report
Admin या bulk action

SaaS team database के संभावित नुकसान को कैसे घटाए?

हर service को जरूरी database permissions ही दें

जहाँ व्यावहारिक हो अलग database identities लें और केवल जरूरी tables, views तथा operations की अनुमति दें। Read-only reporting service को schema बदलने या व्यापक write access की जरूरत नहीं; application role को database-owner अधिकार अपने-आप न दें। Least privilege injection flaw को ठीक नहीं करता, पर उसकी पहुँच सीमित करता है।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

हर data-access रास्ते में tenant scope स्पष्ट रखें

Data-access layer में authorization और tenant scope लागू करें ताकि सुरक्षित query भी दूसरे customer की rows न दिखाए। जाँचें कि filters, exports, nested relations, background jobs और raw queries सही tenant context अपनाते हैं। Parameterization query-structure injection रोकता है; यह तय नहीं करता कि कौन record पढ़ सकता है।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

Safe errors लौटाएँ और query telemetry की सुरक्षा करें

User को सामान्य error दें और staff के लिए इतना diagnostic detail रखें कि समस्या समझ आए, पर SQL text, schema names या database credentials उजागर न हों। Logs से personal data और secrets हटाएँ। बार-बार database errors या असामान्य query volume track करें; पूरी request dump से customer input लीक न हो।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

SQL injection को सुरक्षित ढंग से कैसे खोजें और ठीक करें?

Query बनाने वाले हर रास्ते की समीक्षा करें

Raw query methods, string concatenation, dynamic filters और search, reporting, import, export तथा admin features से database calls खोजें। Second-order रास्ते भी देखें जहाँ stored input बाद में दूसरी query में इस्तेमाल होता है। अनुमति वाले non-production environment में harmless inputs और नियंत्रित dataset से test करें।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

Database boundary पर regression tests जोड़ें

जाँचें कि असामान्य मगर वैध user values data बनी रहें और query structure न बदलें। Allowlisted sort तथा filter, tenant filters, error handling और least-privilege behavior test करें। Tests असली driver और ORM के साथ रखें; mocked repository parameter binding नहीं जाँच सकता।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

Compromise संभव हो तो exposure जाँचें और credentials rotate करें

Production तक पहुँची flaw पर database और application logs, प्रभावित tenants, query permissions तथा unauthorized access या बदलाव के प्रमाण देखें। Fix तक vulnerable route या database role सीमित करें, फिर data impact और incident obligations जाँचें। यदि credentials उजागर हो सकते थे तो उन्हें rotate करें और deployment के बाद fix verify करें।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

SaaS SQL injection के सवाल

क्या ORM हर SQL injection रोक देता है?

नहीं। ORM सामान्य values को अक्सर parameterize करता है, लेकिन raw queries, dynamic identifiers और unsafe query fragments vulnerable रह सकते हैं। ORM की binding सुविधाएँ लें और हाथ से जोड़े SQL की समीक्षा करें।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

क्या input filter SQL injection रोक सकता है?

Filter business format लागू कर सकता है, पर characters या query words की denylist अधूरी होती है और वैध values भी reject कर सकती है। Parameterized queries values को SQL syntax से अलग रखती हैं और मुख्य बचाव होनी चाहिए।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

क्या stored procedures हमेशा सुरक्षित होती हैं?

नहीं। Untrusted input जोड़कर dynamic SQL बनाने वाली procedure भी injectable हो सकती है। देखें वह statement कैसे बनाती और चलाती है; उसके भीतर parameterized database operations अपनाएँ।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet

क्या read-only database account SQL injection जोखिम खत्म करता है?

नहीं। यह कुछ बदलाव सीमित करता है, लेकिन vulnerable read path users या tenants का data फिर भी उजागर कर सकती है। Parameter binding, tenant authorization, least privilege, monitoring और regression tests साथ में रखें।

इस बिंदु के स्रोत: OWASP SQL Injection Prevention Cheat Sheet