2015-10-15 2 views
0

Существует метод procedure AppendRecord(const Values: array of const);, который присутствует в TDataSet, TFDTable и т.д. Если мы будем следовать в глубине TDataset источника (я не имею FireDac Source). Данные устанавливаются SetFields(Values); и Fields[I].AssignValue(Values[I]) методами. Интересно, безопасно ли с точки зрения SQL-инъекций передать что-то вроде этого: MyFireDacDS.AppendRecord([..., Edit1.Text, ...])?ли TFDTable.AppendRecord Injection-Safe

+0

iiuc все, что использует параметризованные операторы SQL вместо построения SQL INSERT из струн безопасно. Поэтому я бы проверил, использует ли код в конце концов простые операции с строками для установки значений полей. – mjn

+0

'AppendRecord' не принимает SQL как любое из значений и проверяет каждое значение в отношении поля, к которому он должен быть назначен, поэтому существует нулевой риск SQL-инъекции. –

ответ

2

AppendRecord не использует какой-либо из Values в качестве исполняемого SQL и, следовательно, не может быть уязвим для SQL-инъекции больше, чем параметризованный запрос.

SQL-инъекция применяется только к динамически сконструированному SQL с использованием неутвержденного ввода, а поскольку AppendRecord не использует такой SQL, он не подвержен риску внедрения SQL.

(Можно, конечно, проверить это самостоятельно, пытаясь передать SQL в качестве одного из Value пунктов и посмотреть, что происходит.)

+0

Красиво положить. Я хочу, чтобы больше ответов на Sql_injection включало фразу типа «using unvalidated input», +1. – MartynA

+0

Спасибо, Кен, надеюсь, что метод 'AppendRecord', используемый' TFDTable', действительно такой же, как метод 'TDataSet' –

Смежные вопросы