Нужно ли что-либо делать для предотвращения атак вставки / обновления / удаления / внедрения, когда я использую следующий код?
public static DataSet getReportDataSet(string sqlSelectStatement)
{
SqlDataAdapter da = new SqlDataAdapter(sqlSelectStatement, new SqlConnection(GlobalVars.ConnectionString));
DataSet reportData = new DataSet();
da.Fill(reportData, "reportData");
return reportData;
}
Идея заключается в том, что я буду извлекатьSQL из серии Crystal Reports, извлекая данные для каждого отчета из MS SQL Server, привязывая данные к отчетам и затем экспортируя заполненные отчеты в PDF.
Я знаю, что вы можете использовать встроенныйв функциональности, чтобы заставить отчеты извлекать свои собственные данные, но мои тесты показали, что отправка данных в отчеты намного быстрее.Моя единственная проблема в том, что я не могу контролировать отчеты, которые будут публиковаться.
Людям будет необходимо предоставить свои учетные данные для входа на SQL Server, поэтому они смогут просматривать данные только из тех баз данных, к которым у них есть разрешения ... но некоторые пользователи имеют права на запись,и я беспокоюсь, что слепой запуск строки sql, извлеченной из Crystal Report, потенциально может допустить атаку вставкой / обновлением / удалением / инъекцией ...
Я думаю, что могу беспокоиться ни о чем, ноне могу найти ничего, что прямо заявляет, если это можно использовать для чего-то, кроме выбора.
Редактировать:
Итак, из первоначальных комментариев я думаю, чтонужно беспокоиться о выражениях SQL помимо SELECT.Так что мой вопрос теперь становится;Есть ли какой-то способ указать, что SqlConnection может использоваться только для «чтения» (то есть выбора).