Heim > Datenbank > MySQL-Tutorial > Wie kann ich Spaltennamen in C#-SqlCommand-Abfragen dynamisch angeben und gleichzeitig SQL-Injection verhindern?

Wie kann ich Spaltennamen in C#-SqlCommand-Abfragen dynamisch angeben und gleichzeitig SQL-Injection verhindern?

Mary-Kate Olsen
Freigeben: 2024-12-18 09:18:11
Original
266 Leute haben es durchsucht

How Can I Dynamically Specify Column Names in C# SqlCommand Queries While Preventing SQL Injection?

Dynamische Abfrageanpassung für Spaltennamen in C# SqlCommand

Beim Versuch, Spaltennamen mithilfe von Parametern in einem SqlCommand-Objekt anzugeben, kann es zu einem Problem kommen Fehler, der besagt, dass Parameter nicht für Spaltennamen verwendet werden können. Diese Einschränkung stellt eine Herausforderung dar, wenn Sie versuchen, Abfragen auszuführen, bei denen die Spaltennamen variieren können.

Problem:

SqlCommand command = new SqlCommand("SELECT @slot FROM Users WHERE name=@name; ");
prikaz.Parameters.AddWithValue("name", name);
prikaz.Parameters.AddWithValue("slot", slot);
Nach dem Login kopieren

Der obige Code versucht, eine Abfrage mit dynamischen Spalten auszuführen Namen mit Parametern, aber es schlägt mit dem oben genannten Fehler fehl. Als mögliche Problemumgehung wird die Verwendung gespeicherter Prozeduren (SPs) mit Variablendeklarationen für Spaltennamen vorgeschlagen. Dieser Ansatz kann jedoch umständlich sein.

Lösung:

Anstatt den Spaltennamen zu parametrisieren, können Sie die Abfrage dynamisch zur Laufzeit erstellen. Um die Sicherheit zu gewährleisten, sollten Sie die Eingabe auf die Whitelist setzen, um Injektionsangriffe zu verhindern. Hier ist ein Beispiel, wie Sie dies erreichen können:

// TODO: verify that "slot" is an approved/expected value
SqlCommand command = new SqlCommand("SELECT [" + slot + "] FROM Users WHERE name=@name; ")
prikaz.Parameters.AddWithValue("name", name);
Nach dem Login kopieren

In diesem Code wird der Wert von „slot“ verwendet, um die Abfragezeichenfolge während der Laufzeit zu erstellen. Der Parameter „name“ wird weiterhin über einen Parameter angegeben, um eine SQL-Injection zu verhindern. Durch die dynamische Erstellung der Abfrage können Sie die Einschränkung der Verwendung von Parametern für Spaltennamen in SqlCommand überwinden.

Das obige ist der detaillierte Inhalt vonWie kann ich Spaltennamen in C#-SqlCommand-Abfragen dynamisch angeben und gleichzeitig SQL-Injection verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage