iPhone

2009-05-23 19 views
11

बयान को देखते हुए पर एसक्यूएल इंजेक्शन को रोकने के लिए sqlite3_bind_text पर्याप्त है?iPhone

sqlite3 *db; 
sqlite3_stmt *dbps; 

int dbrc = sqlite3_open([dbFilePath UTF8String], &db); 
if (dbrc) { 
    // handle error 
    return; 
} 

dbrc = sqlite3_prepare_v2 (db, sql, -1, &dbps, NULL); 

sqlite3_bind_text(dbps, 1, [userContent UTF8String], -1, SQLITE_TRANSIENT); 

dbrc = sqlite3_step(dbps); 
if (SQLITE_DONE != dbrc) { 
    // handle error 
} 

sqlite3_finalize (dbps); 
sqlite3_close(db); 

उत्तर

11

हाँ, अगर आप केवल * कार्यों sqlite3_bind_ करने के लिए उपयोगकर्ता की आपूर्ति डेटा पास है, तो आप सुरक्षित एसक्यूएल इंजेक्शन हमलों से कर रहे हैं (इन हमलों मान लें कि आप गतिशील रूप से आपकी क्वेरी स्ट्रिंग का निर्माण और उद्धरण/उपयोगकर्ता से बच नहीं है डेटा सही ढंग से आपूर्ति की)।

+0

क्या आप मुझे कुछ दस्तावेज पर इंगित कर सकते हैं जो पुष्टि करता है कि 'sqlite3_bind_text' फ़ंक्शन एसक्यूएल इंजेक्शन हमलों से सुरक्षित है? मुझे दस्तावेज में कोई संकेत नहीं मिला है कि बाध्यकारी कुछ पात्रों को फ़िल्टर करेगा? (Http://www.sqlite.org/c3ref/bind_blob.html) –