Как вы избегаете строк для имен таблиц SQLite в c? - PullRequest
0 голосов
/ 26 октября 2019

Как вы избегаете строк для имен таблиц SQLite в c?

Я нахожу документ, но он не сообщает мне детали https://www.sqlite.org/lang_keywords.html

И этот документ говоритчто sql оканчивается на '\ x00' https://www.sqlite.org/c3ref/prepare.html

Вот такой же вопрос в python: Как вы экранируете строки для имен таблиц / столбцов SQLite в Python?

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Идентификаторы должны быть заключены в двойные кавычки, если они нуждаются в экранировании, причем все двойные кавычки в них экранируются путем удвоения кавычек. 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-инъекций и т. п.

0 голосов
/ 26 октября 2019

Пример:

  • example до 'example'
  • 'a до '''a'

Деталь:

  • Не используйте значение байта 0 в строке. Он вернет ошибку, такую ​​как unrecognized token: "'", даже если вы передадите правильный zSql len в sqlite3_prepare_v2 ().
  • Замените ' на '' в строке добавьте ' в начало и конец строки. ' - одинарная кавычка (байт 39).
  • Не рекомендуется использовать недопустимую строку utf8. Строка не обязательно должна быть допустимой строкой utf8 в соответствии с кодом синтаксического анализа в sqlite3 версии 3.28.0. Я проверил, что недопустимая строка utf8 может использоваться в качестве имени таблицы, но в документе sqlite3_prepare_v2 () сказано, что вам нужно SQL statement, UTF-8 encoded

  • У меня есть программа для подтверждения того, что любой список байтов сlen 1,2 без байтового значения 0 в нем, может использовать в качестве имени таблицы, и программа может читать значение из этой таблицы, может выводить таблицу из таблицы SQLITE_MASTER в sqlite3 версии 3.28.0.

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