2012-06-06 3 views
1

Я удаление всех данных из таблицы, используя ниже фрагмент кодаВЕЬЕТЕ в Iphone не работает

NSString *deleteStatementNS = [NSString stringWithFormat: 
           @"DELETE FROM %@",[tableNames objectAtIndex:i]]; 

const char *prepareDelete ="DELETE FROM '?'"; 
const char *tbleName = [[tableNames objectAtIndex:i] UTF8String]; 
if (sqlite3_prepare_v2(dBase, prepareDelete, -1, &dbpreprdstmnt, NULL) == SQLITE_OK) 
{ 
    dbrc = sqlite3_bind_text(dbpreprdstmnt, 1, tbleName, -1, SQLITE_TRANSIENT); 
    dbrc = sqlite3_step(dbpreprdstmnt); 

    sqlite3_finalize(dbpreprdstmnt); 
    dbpreprdstmnt = NULL; 
} 
else 
{ 
    NSLog(@"Error %@",[NSString stringWithCString:sqlite3_errmsg(dBase) encoding:NSUTF8StringEncoding]); 
} 

Но, к сожалению, удаление не происходит я получаю сообщение об ошибке, как Error no such table: ? Я не в состоянии подготовить только заявление. Но если я использую протокол подготовки, например, ниже

const char *prepareDelete =[deleteStatementNS UTF8String]; 

Это работает абсолютно нормально. Я не могу привязать переменную, чтобы остановить атаки SQL-инъекций. Возможно, я знаю причину этой ошибки. Я нашел много мест, где сообщается об этом фрагменте кода, поскольку он работает нормально.

ответ

2

Я не могу связать переменную, чтобы остановить атаки SQL-инъекций.

Имена таблиц не могут быть связаны как переменные.

Чтобы избежать атак SQL-инъекций, не позволяйте вашим пользователям указывать, какие имена таблиц будут удалены. Убедитесь, что имена таблиц взяты из надежного источника (например, жестко запрограммированного в вашей программе).

На самом деле это действительно плохая идея удалить все данные в таблице, когда имя таблицы происходит из ненадежного источника. Даже если вы предотвращаете атаки SQL-инъекций, злоумышленник может все же удалять данные, которые вы не хотите удалять.

+0

Спасибо за ваш ответ. Фактически я получаю имена таблиц из другого SQL-запроса, и он будет храниться в массиве во время выполнения. Все имена таблиц являются динамическими, поэтому я не вижу проблем с его использованием. И я знаю, что никто не может сделать его приложение полностью защищенным от хакера. Но для curiosoty, как хакер все еще может взломать мою БД или как он все еще может делать инъекции, если я привяжу переменные. Пожалуйста, просветите меня, пожалуйста. – Star

Смежные вопросы