Я провожу исследование способов предотвращения инъекции SQL при использовании основного ORM Orm Orm. Большинство блогов и источников ссылаются на официальную документацию Microsoft, что лучший способ - это дезинфицировать значения, использовать интерполированные строки и анализировать/проверить пользовательские значения, прежде чем использовать их в запросах. Нашел ответ на мой вопрос о том, насколько безопасно использовать конструкцию дерева выражения. А также, это причина этого поста, потому что я также не нашел никакой проблемы, но я мог бы говорить из -за своей неопытности в этом вопросе. < /P>
Например, это < Strong> небезопасно способ создать SQL-запрос:
public List GetFilteredBlogs(string filterField, string filterValue)
{
List blogs = context.Blogs
.FromSqlRaw($"select * from Blogs where {filterField} = {filterValue}");
return blogs;
}
< /code>
И это будет эквивалентно запросу с использованием конструкции выражения: < /p>
public List GetFilteredBlogs(string filterField, string filterValue)
{
ParameterExpression entity = Expression.Parameter(typeof(Blog));
MemberExpression entityProperty = Expression.Property(entity, filterField);
ConstantExpression valueConstant = Expression.Constant(filterValue);
BinaryExpression equal = Expression.Equal(entityProperty, valueConstant);
LambdaExpression filter = Expression.Lambda(equal, entity);
List blogs = context.Blogs.Where(filter);
return blogs;
}
< /code>
Это очень простой пример, но должен хорошо работать с моим вопросом. Почему это не более широко используется против инъекций SQL, когда необходимы динамические запросы? Я вижу, что это можно злоупотреблять, когда кто -то захочет преобразовать полный запрос SQL в дерево выражения, но при использовании с простыми значениями и конкретными построением запросов я думаю, что может быть даже лучше, чем дезинфицировать или анализировать пользователь, предоставляемые входы.
Я знаю, что в этом примере пользователь может получить доступ к любому столбцу из таблицы блогов, но, допустим, это не имеет значения, или будет защита, для которых столбцы доступны. < /p>
Подробнее здесь: https://stackoverflow.com/questions/794 ... -injection
Организация сущности ядро: насколько безопасны выражения от инъекции SQL? [закрыто] ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение