Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Улучшение безопасности запросов FireDAC: параметризация и предотвращение SQL-инъекций

Delphi , Базы данных , SQL

В современном программировании важно обеспечить безопасность приложений, особенно когда речь идет о работе с базами данных. Одно из ключевых направлений в этом – предотвращение SQL-инъекций, которые могут привести к несанкционированному доступу, изменению или удалению данных. В контексте использования FireDAC в среде Delphi и Pascal, важно правильно формировать запросы, чтобы избежать подобных угроз.

Проблема и решение

Рассмотрим пример кода, который демонстрирует неправильный подход к формированию запросов:

procedure TForm_Main.CB_Nom_Specialite_DemandeChange(Sender: TObject);
begin
  DM.FDQ_Find.SQL.Clear;
  DM.FDQ_Find.Open('select ID_Specialite from Specialite where Nom_Specialite = ' + (CB_Nom_Specialite_Demande.Text)  );
  ID_Specialite := 0;
  ID_Specialite := DM.FDQ_Find.FieldByName('ID_Specialite').AsInteger;
end;

В этом коде мы видим, что строка запроса формируется путем конкатенации строк, что может привести к SQL-инъекции, если значение CB_Nom_Specialite_Demande.Text содержит специальные символы или может быть истолковано как часть SQL-кода.

Подтвержденный ответ

Для решения этой проблемы рекомендуется использовать функцию SysUtils.QuotedStr(), которая корректно обрабатывает специальные символы и вставляет их в строку запроса:

DM.FDQ_Find.Open('select ID_Specialite from Specialite where Nom_Specialite = ' + QuotedStr(CB_Nom_Specialite_Demande.Text));

Однако более безопасным и предпочтительным вариантом является использование параметризованных запросов. Это позволяет отделить данные от кода запроса, что значительно повышает безопасность:

DM.FDQ_Find.Open('select ID_Specialite from Specialite where Nom_Specialite = :specialite', [CB_Nom_Specialite_Demande.Text]);

Или же можно задать параметр отдельно:

DM.FDQ_Find.SQL.Text := 'select ID_Specialite from Specialite where Nom_Specialite = :specialite';
DM.FDQ_Find.ParamByName('specialite').AsString := CB_Nom_Specialite_Demande.Text;
DM.FDQ_Find.Open;

Альтернативный ответ и комментарии

В комментариях к коду упоминается альтернативный способ экранирования одинарных кавычек с помощью двойных одинарных кавычков. Однако стоит отметить, что это не является безопасным методом и не рекомендуется для использования в производственном коде.

Заключение

Правильное использование параметризованных запросов в FireDAC не только увеличивает безопасность приложения, но и упрощает его поддержку и отладку. Разработчикам следует избегать конкатенации строк при формировании запросов и использовать параметризацию, чтобы предотвратить SQL-инъекции и другие потенциальные угрозы безопасности.

Создано по материалам из источника по ссылке.

В программировании на Delphi и использовании компонента FireDAC для работы с базами данных важно применять параметризацию запросов для предотвращения SQL-инъекций.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: SQL ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 13:49:16/0.0052311420440674/1