Достаточно ли sqlite3_bind_text для предотвращения внедрения SQL на iPhone - PullRequest
11 голосов
/ 23 мая 2009

Дано утверждение:

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

1 Ответ

11 голосов
/ 23 мая 2009

Да, если вы только передаете пользовательские данные в функции sqlite3_bind_ *, то вы защищены от атак с использованием SQL-инъекций (эти атаки предполагают, что вы динамически создаете строку запроса и не цитируете / экранируете предоставленные пользователем данные правильно) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...