Могу ли я параметризировать оператор создания в Go? - PullRequest
0 голосов
/ 23 мая 2018

Используя библиотеку Go SQL, мы можем создавать операторы SELECT, INSERT, UPDATE и DELETE с параметрами, подобными этим:

db.Query("SELECT * FROM database.table WHERE param = ?", param_value)

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

Есть ли способ параметризации операторов CREATE с использованием библиотеки Go SQL?

1 Ответ

0 голосов
/ 23 мая 2018

Параметры SQL-запроса заменяют только скалярное значение.

То есть вы можете использовать параметр для замены только в том случае, если вы в противном случае использовали бы строку с постоянными кавычками, дату / время с постоянными кавычками или константучисловой.

Параметры запроса SQL нельзя использовать для:

  • Имен таблиц, имен столбцов или других идентификаторов
  • выражений SQL
  • Списки скалярных значений (как в предикате IN(...))
  • ключевые слова SQL

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

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