2016-04-08 10 views
-2

この挿入文をSQLインジェクションに弾力性のあるものにする必要があります。SQL文が機​​能しないのはなぜですか?

調査した例のようにparamsを使用しましたが、次のコード行で "name説明が現在のコンテキストに存在しません"というエラーが表示されます。 "sqlCommand.Parameters.AddWithValue(" @ Description "、newDescription.Description ); " これを修正するにはどうすればよいですか?

攻撃に強く、文字列を渡してデータベースが安全であることをSQL Serverで確認する「テスト」文字列も含まれています。これをテストする最善の方法ですか?

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

newDescriptionはどこにも宣言されていないように見えます。 – Tibrogargan

+0

エラーとは何ですか?コードはコンパイルされていますか? – DDan

+0

@Tibrogarganはい、そうです、それを宣言する最良の方法は何ですか?そしてコードのどこに? SqlConnection connの前に宣言する必要がありますか?ありがとう。 – 4201

答えて

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

これが解決策です!完璧に動作します、ありがとうございます! – 4201

0

まず、あなたのnewDescription.Descriptionは、それはあなたが説明というクラスを持っている場合、これはあなたがクラスをインスタンス化する方法であるエラー

を表示する理由です宣言されていないされています

Description newDescription = new Description(); 

パラメータを使用する方法についての質問は、ここでどのように行うのですか。

あなたはこのようにそれを行うことができます。

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(); 
関連する問題