Как санировать входные данные базы данных ODBC? - PullRequest
5 голосов
/ 01 июня 2011

В настоящее время я использую MySql, но предпочел бы решение ODBC, чтобы оно было в будущем.

Как санировать пользовательский ввод перед передачей его в базу данных ODBC?

И, пока яНахожусь в этом, я обернуть мою строку в двойные кавычки, например, "INSERT INTO VALUES (description)" "` - но что, если сам текст содержит двойные кавычки?

Ответы [ 4 ]

8 голосов
/ 01 июня 2011
  1. ODBC не является оптимальным способом работы с MySQL.Даже если в будущем вам потребуется поддержка нескольких СУБД, вы можете рассмотреть возможность использования библиотек доступа к данным из нескольких СУБД, включая dbExpress (поставляется с Delphi) и 3d party - AnyDAC (коммерческий), ZeosLib (бесплатный),и т.д.
  2. Если вам нужно подставить строковую константу в запрос MySQL, вам нужно оставить специальные символы или преобразовать строку в шестнадцатеричное представление .Это защищает вас от возможных SQL-инъекций и синтаксических ошибок.Но процесс подготовки запроса усложняется.
  3. Лучший способ - использовать параметры и передавать литералы в качестве значений параметров.Это просто и безопасно.
8 голосов
/ 01 июня 2011

Попробуйте использовать параметризованное SQL-предложение

следующим образом.

INSERT INTO MyTable (Field1,Field2) VALUES (:Param1,:Param2)

обратитесь к этой статье от embarcadero за дополнительной информацией о том, как использовать параметры Using Parameters in Queries.

3 голосов
/ 01 июня 2011

Вы также можете посмотреть здесь Delphi - защита от SQL-инъекций , есть некоторые указания / примеры.

3 голосов
/ 01 июня 2011

Используйте hibernate , если можете, возможно, через RMI от delphi. Несмотря на то, что он ориентирован на Java, он почти полностью изолирует программиста от базовой БД и обрабатывает упомянутые вами проблемы, а также многое другое.

кстати, чтобы ответить на ваш вопрос о двойных кавычках, сохранить значение, содержащее двойные кавычки, экранировать их как двойные кавычки, например,

This is "my" text

будет сохранено как

"This is ""my"" text"
...