SQL इंजेक्शन लैब
आपके ब्राउज़र में स्थानीय रूप से चलता हैदेखें कि असुरक्षित SQL निर्माण क्वेरी को कैसे बदलता है और बाइंडिंग मानों को डेटा कैसे बनाए रखती है
रक्षात्मक शिक्षा लैब: क्वेरी केवल इन-मेमोरी SQLite डेटाबेस के अंतर्निहित नकली डेटा पर चलती हैं। कोई URL या बाहरी लक्ष्य नहीं है।
इनपुट
एक SQL स्टेटमेंट, जिसमें उपयोगकर्ता मान की जगह {{value}} ठीक एक बार हो।
इसे फ़ॉर्म, URL या API अनुरोध से आया अविश्वसनीय इनपुट मानें।
सीड डेटा (नकली): users(id, email, role) में 5 पंक्तियाँ और orders(id, user_id, amount) में 6 पंक्तियाँ। हर तरफ़ की अपनी प्रति है।
SQL Injection Safety Lab क्या करता है
SQL Injection Safety Lab साथ-साथ दिखाता है कि जब उपयोगकर्ता-नियंत्रित मान को SQL टेक्स्ट में चिपकाया जाता है और जब उसे पैरामीटर के रूप में बाइंड किया जाता है, तब क्या होता है। असुरक्षित क्वेरी हाइलाइट करती है कि मान के कौन-से वर्ण SQL के रूप में पढ़े गए (बंद किए गए कोट, जोड़ी गई OR शर्तें, टिप्पणियाँ, अतिरिक्त क्लॉज़), जबकि पैरामीटराइज़्ड क्वेरी SQL टेक्स्ट को स्थिर रखती है और मान को अलग से डेटा के रूप में दिखाती है। यह रक्षात्मक सीखने का टूल है, कोई वल्नरेबिलिटी स्कैनर नहीं: इसमें कोई URL इनपुट या बाहरी लक्ष्य नहीं है।
उपयोग कैसे करें
- 1.कोई उदाहरण लोड करें या ऐसा एक SQL स्टेटमेंट लिखें जिसमें {{value}} ठीक एक बार हो।
- 2.उपयोगकर्ता-नियंत्रित मान टाइप करें। असुरक्षित और पैरामीटराइज़्ड क्वेरी तथा व्याख्या टाइप करते ही अपडेट होती हैं।
- 3.इन-मेमोरी SQLite सैंडबॉक्स में नकली सीड डेटा पर दोनों क्वेरी चलाने और लौटी या बदली पंक्तियों की तुलना के लिए तुलना चलाएँ चुनें।
- 4.PostgreSQL, MySQL, SQLite या SQL Server के लिए SQL, JavaScript/TypeScript, Python, PHP, Java या Go में पैरामीटराइज़्ड संस्करण कॉपी करने के लिए सुरक्षित कोड खोलें।
- 5.किसी भी लेखन के बाद डेटाबेस रीसेट करें सीड डेटा वापस लाता है।
मान बाइंड करना और आइडेंटिफ़ायर के लिए अनुमति-सूची
मान पैरामीटर में जाने चाहिए: PostgreSQL $1, MySQL और SQLite ?, और SQL Server @p1 का उपयोग करते हैं, जबकि ड्राइवरों के अपने नियम होते हैं, जैसे psycopg में %s या PDO में :name। कोड बनाते समय लैब हर ड्राइवर के नियम का पालन करती है। टेबल नाम, कॉलम नाम और ORDER BY फ़ील्ड बाइंड नहीं हो सकते, इसलिए सुरक्षित पथ इनपुट को अनुमति-सूची के स्थिर आइडेंटिफ़ायर से मैप करता है और बाकी सब अस्वीकार करता है। कोड चेकर टैब पेस्ट किए गए कोड में इंटरपोलेट, फ़ॉर्मैट या जोड़कर बने SQL को खोजता है और हर मिलान को संभावित SQL इंजेक्शन जोखिम बताता है, क्योंकि वह यह ट्रेस नहीं करता कि मान कहाँ से आते हैं।
सैंडबॉक्स, सीमाएँ और गोपनीयता
केवल SQLite चलता है, एक Web Worker में, sql.js के स्व-होस्टेड WebAssembly बिल्ड के साथ। तुलना की हर तरफ़ नकली users और orders की अपनी इन-मेमोरी प्रति होती है, इसलिए असुरक्षित लेखन कभी सुरक्षित परिणाम को प्रभावित नहीं करता। हर तरफ़ एक स्टेटमेंट चलता है; स्टैक किए गए स्टेटमेंट चलाने के बजाय रिपोर्ट किए जाते हैं। क्वेरी 3 सेकंड के बाद रुक जाती हैं, परिणाम अधिकतम 100 पंक्तियाँ और 16 कॉलम दिखाते हैं, टेम्पलेट 4,000 और मान 500 वर्णों तक सीमित हैं। PostgreSQL, MySQL और SQL Server स्निपेट केवल संदर्भ हैं। टेम्पलेट, मान और कोड आपके ब्राउज़र में रहते हैं और किसी सर्वर या एनालिटिक्स को नहीं भेजे जाते।
