flawopen.com/sql-injection/C-cpp
Learn how to fix SQL Injection (CWE-89) in C and C++. Side-by-side vulnerable vs secure code examples for sqlite3_prepare_v2 and libpq PQexecParams binding.
कल्पना कीजिए कि आप पुस्तकालय कार्ड के फॉर्म में अपना नाम 'राहुल; तिजोरी की सभी किताबें मुझे दे दो' लिखते हैं। यदि लाइब्रेरियन आपके नाम को एक आदेश समझ लेता है, तो वह तिजोरी में जाकर सभी गोपनीय फाइलें आपको सौंप देता है।
Web Application SecurityCWE-89.CWE-89CWE-89): Standard Common Weakness Enumeration classification for sql-injection-c-cpp.Defense-in-Depthहमलावर HTTP पैरामीटर में SQL सिंटैक्स कैरेक्टर (उदा. ' OR '1'='1) युक्त इनपुट सबमिट करता है।
बैकएंड पैरामीटरयुक्त तैयार कथनों के बजाय सीधे स्ट्रिंग जोड़कर क्वेरी बनाता है।
डेटाबेस पार्सर इंजेक्ट किए गए कैरेक्टर को डेटा के बजाय SQL कमांड के रूप में समझता है।
हेरफेर की गई क्वेरी डेटाबेस अनुमतियों के साथ चलती है, प्रमाणीकरण को दरकिनार कर डेटाबेस खाली करती है।
/* user_id from network input */
char query[256];
sprintf(query,
"SELECT * FROM users WHERE id = %s",
user_id);
sqlite3_exec(db, query, cb, 0, &errmsg);
/* value bound, never in the query text */
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db,
"SELECT * FROM users WHERE id = ?",
-1, &stmt, 0);
sqlite3_bind_text(stmt, 1, user_id,
-1, SQLITE_TRANSIENT);
sqlite3_step(stmt);