Идентификаторы должны быть заключены в двойные кавычки, если они нуждаются в экранировании, причем все двойные кавычки в них экранируются путем удвоения кавычек. bad"name"
должно стать "bad""name"
для использования в операторе SQL.
Sqlite поставляется с пользовательскими версиями *printf()
функций , которые включают форматы для экранирования идентификаторов sql и строк (которыеиспользовать одинарные кавычки в SQL). Тот, который выполняет экранирование двойных кавычек для идентификаторов: %w
:
char *sanitized_ddl = sqlite3_mprintf("CREATE TABLE \"%w\"(\"%w\", \"%w\");",
"bad\"name", "foo bar", "baz");
В идеале, однако, вы не собираетесь использовать имена таблиц или столбцов, которые требуют экранирования,но рекомендуется избегать использования имен, предоставленных пользователями, для защиты от атак SQL-инъекций и т. п.