私はすでにいくつかの回答を見てきましたが、私のクエリは少し異なります:
元のクエリは次のとおりです。
cmd.CommandText = "select count(Table1.UserID) from Table1 INNER JOIN
Table2 ON Table1.ID = Table2.ID where Table1.Userid = " + UserID + " and
Table1.Number != '" + Number +"' and Table2.ID < 4";
SQL インジェクションの変更されたクエリを次に示します。
cmd.CommandText = "select count(Table1.UserID) from Table1 INNER JOIN
Table2 ON Table1.ID = Table2.ID where Table1.Userid = @userId and
Table1.ID != @Number and Table2.ID < 4";
お気づきのように、最初のクエリはUserId
二重引用符で囲まれています:..." + UserID +"...
そして Number
私たちは一重引用符と二重引用符で囲まれています:...'" + Number + "'...
パラメータを設定する方法は次のとおりです。
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@Number", Number);
cmd.Parameters.AddWithValue("@userId",UserID);
はUserID
整数でNumber
、文字列です。
それで、私の質問は、変更されたクエリが正しい方法でフォーマットされているかどうかです。@UserId
元のクエリで指定されているさまざまな方法を考慮して、@Number
パラメータをクエリに入れる方法に違いはありますか?