2016-04-04 4 views
-1

Ich habe eine datengesteuerte Website, wo der Benutzer einige Zeichenfolgen auf einer Seite eingeben kann, die in eine Datenbank geht. Ich verwende LINQ für alle Einfügungen und Aktualisierungen, also denke ich, dass dieser Teil sicher ist. Die eingegebenen Daten werden dann den Benutzern auf einer anderen Seite angezeigt.Daten sicher aus SQL-Injection ausgeben?

Wenn die Ausgabe der Daten, ich bin noch nicht LINQ (nicht sicher, ob ich muss), und ich habe einige „SELECT“ Aussagen, die ähnlich wie diese:

SELECT Name, Description FROM Table WHERE ID=something 

Meine Frage ist: Wenn die "Name" oder "Beschreibung" Daten in der obigen Aussage enthalten bösartigen Code, ist SQL-Injektion in diesem Kontext möglich?

Alle meine SELECT-Anweisungen mit einer "WHERE" -Klausel vergleichen definitiv nur Zahlen, also denke ich, dass dieser Teil sicher ist. Prost.

Antwort

0

Solange Sie die SQL-Anweisungen nicht selbst aus der Benutzereingabe erstellen, sind Sie in Ordnung.

Zum Beispiel, wenn Sie die folgend tun:

var sqlStatement = "SELECT " + Name + "FROM Table WHERE ID=something"; 

Und verwendet, dass es würde auf jeden Fall eine Chance für SQL-Injection-Angriffe einzuführen.

+0

Ja, gut, wie ich schon sagte, Benutzereingaben werden verwendet, aber nicht wie Sie vorgeschlagen, wo Zeichenfolge Verkettung verwendet wird ... Also sollte ich sicher sein, oder? – user3173098

+0

Korrigieren. Wenn Sie unbedingt die Benutzereingabe für Ihre SQL verwenden müssen, verwenden Sie einen SQLCommand und fügen Sie SQLParameters hinzu, damit Sie die Zeichenfolgen nicht zum Erstellen Ihrer SQL verwenden. Siehe dieses SO-Post http://stackoverflow.com/questions/910465/avoiding-sql-injection-without-parameters – kah608

+1

Zustimmen kein direktes Risiko, aber wenn eine andere Anwendung die Abfrageergebnisse als Eingabe für eine andere Abfrage ohne ordnungsgemäße Entweichen oder Parametrisierung verwendet, Sie bin im Wesentlichen ein Träger der Injektion geworden, obwohl du nicht direkt betroffen bist. Überprüfen und/oder bereinigen Sie die Eingabe immer, bevor Sie in die Datenbank schreiben. Außerdem sind Sie weiterhin für allgemeine Code-Injection-Angriffe offen. In diesem Fall ist es anfällig für permanente Cross-Site-Scripting-Angriffe, die dazu führen können, dass andere Eigenschaften, einschließlich Ihrer Datenbank, verletzt werden. – SQLmojoe

Verwandte Themen