问题 sqlite3_bind_text是否足以阻止iPhone上的SQL注入


鉴于声明:

const char *sql = "INSERT INTO FooTable (barStr) VALUES (?)";

是以下用途 sqlite3_bind_text (和相关的 sqlite3_bind_* 功能)足以防止SQL注入攻击?

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); 

12450
2018-05-23 09:32


起源



答案:


是的,如果您只将用户提供的数据传递给sqlite3_bind_ *函数,那么您就可以免受SQL注入攻击(这些攻击假定您动态构建查询字符串并且不会正确引用/转义用户提供的数据)。


11
2018-05-23 10:22



你能指点我一些证实那个的文件 sqlite3_bind_text SQL注入攻击的功能是否安全?我没有在文档中发现绑定会过滤某些字符的任何提示? (sqlite.org/c3ref/bind_blob.html) - Bruno Bieri


答案:


是的,如果您只将用户提供的数据传递给sqlite3_bind_ *函数,那么您就可以免受SQL注入攻击(这些攻击假定您动态构建查询字符串并且不会正确引用/转义用户提供的数据)。


11
2018-05-23 10:22



你能指点我一些证实那个的文件 sqlite3_bind_text SQL注入攻击的功能是否安全?我没有在文档中发现绑定会过滤某些字符的任何提示? (sqlite.org/c3ref/bind_blob.html) - Bruno Bieri