Является sqlite3_bind_text достаточным для предотвращения внедрения SQL на iPhone
Учитывая утверждение:
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
Да, если вы передаете только предоставленные пользователем данные в функции sqlite3_bind_ *, тогда вы можете быть в безопасности от атак SQL-инъекций (эти атаки предполагают, что вы динамически создаете строку запроса и не указываете/не удаляете предоставленные пользователем данные правильно).