Я нахожусь в середине «Pen Test» и пытаюсь найти «самый безопасный» способ использования Entity Framework Core
для хранимых процедур.Вы могли бы подумать, что это будет очевидно, но, пожалуйста, продолжайте читать.
Фон
Использование этого документа при использовании Raw SQL и прочтении Что нового в .NET Core 2.0 мой начальныйВ коде использовалась интерполяция строк (показанная как безопасная в документе «что нового»).
Однако Pen Test успешно справился с атакой SQL-инъекций против него.
Пример кода-нарушителя:
dbResults = _datacontext.Blogs.FromSql($"myStoredProcedure @parmeter1 = {parmeter1String}");
Итак, я изменил код для использования параметров, но они также прорвались через это:
dbResults = _datacontext.Blogs.FromSql("myStoredProcedure @parmeter1 = {0}", parmeter1String);
, и они сломали это (хотя, может быть, я недостаточно чистил - по крайней мере, я остановилсяexec
):
dbResults = _datacontext.Blogs.FromSql("myStoredProcedure @parmeter1 = {0}", parmeter1String.ToCleanedSqlString());
Так есть ли ответ на использование SqlParameter (не показан ни в одном из приведенных выше документов / примеров)?
dbResults = _datacontext.Blogs.FromSql("myStoredProcedure @parmeter1 = {0}", new SqlParameter("@parmeter1", parmeter1String));
или есть лучший способ?
Буду признателен за определенные указания.
РЕДАКТИРОВАТЬ Следующий комментарий:
Важное дополнение: хранимая процедура выполняет динамический sql, но эта процедуране находится в моем заявлении, и я не могу контролировать его.Я должен позвонить.