Ich recherchiere nach Möglichkeiten, um die SQL -Injektion bei der Verwendung von Entity Framework Core ORM zu verhindern. Die meisten Blogs und Quellen zitieren offizielle Microsoft -Dokumentation, dass der beste Weg darin besteht, Werte zu beruhigen, interpolierte Zeichenfolgen zu verwenden und Benutzer analysieren/zu überprüfen, die die Werte angeben, bevor sie in Abfragen verwendet werden. Ich habe eine Antwort auf meine Frage gefunden, wie sicher es ist, die Ausdrucksbaumkonstruktion zu verwenden. Und das ist auch der Grund für diesen Beitrag, weil ich auch kein Problem gefunden habe, aber ich könnte aus meiner Unerfahrenheit in dieser Angelegenheit sprechen. < /P>
Zum Beispiel ist dies ein < strong> unsicher Weg zum Erstellen von SQL-Abfrage:
public List GetFilteredBlogs(string filterField, string filterValue)
{
List blogs = context.Blogs
.FromSqlRaw($"select * from Blogs where {filterField} = {filterValue}");
return blogs;
}
< /code>
Und dies wäre ein Abfrageäquivalent unter Verwendung der Ausdruckskonstruktion: < /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>
Dies ist ein sehr einfaches Beispiel, sollte aber gut mit meiner Frage funktionieren. Warum wird dies nicht häufiger gegen SQL -Injektionen eingesetzt, wenn dynamische Abfragen benötigt werden? Ich kann sehen, dass dies missbraucht werden kann, wenn jemand die vollständige SQL -Abfrage in den Ausdrucksbaum umwandeln möchte. Wenn jedoch mit einfachen Werten und spezifischen Abfragenkonstruktionen verwendet werden, ist es vielleicht sogar besser, als mit den Eingängen der Benutzer bereitzustellen. >
Ich bin mir bewusst, dass in diesem Beispiel der Benutzer aus Blogs -Tabellen auf jede Spalte zugreifen kann, aber sagen wir, es spielt keine Rolle, oder es würde Schutz geben, für die Spalten zugänglich sind. < /p>
Danke Sie für Ihre Antworten und Ihre Zeit.
Entity Framework Core: Wie sicher sind Ausdrücke aus der SQL -Injektion? ⇐ C#
-
- Similar Topics
- Replies
- Views
- Last post