2016-04-08 14 views
-2

Ich muss diese Insert-Anweisung für SQL-Injection resistent machen.Warum funktioniert die SQL-Anweisung nicht?

Ich habe params wie pro Beispiele ich recherchiert, aber ich bekomme diesen Fehler: "Name Beschreibung existiert nicht im aktuellen Kontext" in der folgenden Codezeile: "sqlCommand.Parameters.AddWithValue (" @ Description ", newDescription.Description) Wie kann ich das beheben?

Ich habe auch eine "Test" Zeichenfolge enthalten, um zu beweisen, dass der Angriff resistent ist, die Zeichenfolge übergeben und dann in SQL Server überprüft wird, dass die Datenbank sicher ist. Ist das der beste Weg, es zu testen?

Edit: Thanks to @Tibrogargan, who solved this issue. 
+0

Sieht aus wie newDescription nirgendwo erklärt. – Tibrogargan

+0

Was ist der Fehler? Wird der Code kompiliert? – DDan

+0

@Tribargargan Ja, Sie haben recht, wie deklarieren Sie am besten? Und wo im Code? Soll ich es vor der SqlConnection Conn deklarieren? Vielen Dank. – 4201

Antwort

1
namespace Product 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      SqlConnection conn = new SqlConnection(
       "Data Source=localhost\\Win;Initial Catalog=Databasee; Integrated Security=True"); 

      string sql = 
       "INSERT INTO Products " + 
       "(Description)" + 
       "Values (@Description)"; 

      string toxin = "''); DELETE FROM Products; --"; 

      SqlCommand sqlCommand = new SqlCommand(sql, conn); 
      sqlCommand.Parameters.AddWithValue("@Description", toxin); 
      conn.Open(); 
      sqlCommand.ExecuteNonQuery(); 
      conn.Close(); 
     } 

    } 
} 
+0

das ist die lösung! Funktioniert perfekt, vielen Dank! – 4201

0

Zuerst ist Ihr newDescription.Description nicht das ist, erklärt, warum es ein Fehler angezeigt

Wenn Sie eine Klasse namens Beschreibung haben, das ist, wie Sie die Klasse instanziiert:

Description newDescription = new Description(); 

Und für Ihre Frage, wie Sie eine Einfügung in Parameter verwenden, hier ist, wie Sie es tun.

Sie können es wie folgt tun:

string sql = "INSERT INTO Products (Description) Values (@Description)"; 
        SqlCommand sqlCommand = new SqlCommand(sql, conn); 
        sqlCommand.Parameters.Add("@Description", SqlDbType.Varchar).Value = newDescription.SomePropertyInsideYourClass; 
        conn.Open(); 
        sqlCommand.ExecuteNonQuery(); 
        conn.Close(); 
Verwandte Themen