Подскажите пожалуйста, не нашёл информации - проверяются ли данные, вводимые в объект класса TSQLQuery, на SQL-инъекции и корректность вводимых данных в случае:
А) SQLQuery1.Close;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Text:=s;
SQLQuery1.ExecSQL;
Б) SQLQuery1.Append;
SQLQuery1.Edit;
SQLQuery1.FieldByName('f1').AsString := Cells[_f1,r];
SQLQuery1.FieldByName('f2').AsString := Cells[_f2,r];
SQLQuery1.FieldByName('f3').AsString := Cells[_t3,r];
SQLQuery1.Post;
SQLQuery1.ApplyUpdates;
Есть ли проверка на SQL-инъекции в TSQLQuery?
Модератор: Модераторы
Нет, не проверяются.
- leo_bsv
- постоялец
- Сообщения: 276
- Зарегистрирован: 04.08.2010 16:26:10
- Откуда: Йошкар-Ола
- Контактная информация:
Плохо. Спасибо.
Добавлено спустя 35 минут 7 секунд:
И действительно, было проверено следующим образом:
При вводе в Edit1 текста вроде этого : -1 union select y_field from table2
Выдается ответ на второй запрос
Нужно быть аккуратнее
Добавлено спустя 47 минут 46 секунд:
По-моему в паскале была какая-то функция по валидации SQL... или я что-то путаю?
Добавлено спустя 35 минут 7 секунд:
И действительно, было проверено следующим образом:
Код: Выделить всё
...
OQ : TSQLQuery;
...
...
// запрос данных из одного поля
function TMainForm.GetFromBase(s:string): string;
begin
OQ.Close;
OQ.SQL.Clear;
OQ.SQL.Add(s);
OQ.Open;
OQ.First;
result:=OQ.Fields.Fields[0].AsString;
end;
...
procedure TMainForm.Button4Click(Sender: TObject);
begin
ShowMessage(GetFromBase('select x_field from table1 where field_id='+Edit1.Text+';'));
end;
..
При вводе в Edit1 текста вроде этого : -1 union select y_field from table2
Выдается ответ на второй запрос
Нужно быть аккуратнее
Добавлено спустя 47 минут 46 секунд:
По-моему в паскале была какая-то функция по валидации SQL... или я что-то путаю?
- WindOfPain
- новенький
- Сообщения: 33
- Зарегистрирован: 01.09.2009 21:18:23
- Откуда: Санкт-Петербург
На сколько я помню, для того, что бы не было возможности использовать SQL-инъекции,используются запросы с параметрами.
Например:
Если даже параметр будет asString и лепить туда '-1 union select y_field from table2', то набор данных будет фильтроваться по field_id = '-1 union select y_field from table2', а не отрабатываться 'select y_field from table2'
Например:
Код: Выделить всё
function TMainForm.GetFromBase(s:string): string;
begin
OQ.Close;
OQ.SQL.Clear;
s:='select x_field from table1 where field_id= :field_id;'
OQ.SQL.Add(s);
QQ.Params.ParamByName('field_id').asInteger:=2;
OQ.Open;
OQ.First;
result:=OQ.Fields.Fields[0].AsString;
end;
Если даже параметр будет asString и лепить туда '-1 union select y_field from table2', то набор данных будет фильтроваться по field_id = '-1 union select y_field from table2', а не отрабатываться 'select y_field from table2'
