2017-01-26 13 views
1

私はここでいくつかの質問をしましたが、SQLインジェクション可能なコードを使用するためにローストされました。ただし、サイトはオンラインではありませんが、私は今、する。SQLインジェクションcshtml

私は次のコードを使ってテストするためのテストページを作成しました。

var date = "2017-01-26"; 

var testQuery = "SELECT * FROM Test WHERE date = @0"; 
db.Execute(testQuery, date); 

はこれまでのところ、ちょうどこのページを実行している、それは私にエラーを与えていないが、時間の、おそらく周りの99%が、私は私が私のデータを表示するためにforeachを使用してデータベースから何かを選択します。

foreach (var c in db.Query(testQuery)) 
{ 
    <a>@c.kg</a> 
} 

そして、このようにするforeachを追加することによって、それは私にエラーを与える:

A parameter is missing. [ Parameter ordinal = 1 ]

私が間違って何をしているのですか?そして、これはSQLインジェクションでさえ安全ですか? PS。これはMVCタイプのプロジェクトではありません。あなたのDBはEFコンテキスト、デフォルトのパラメータ名がp0である場合

+0

の2番目のパラメータとしてSqlParameterを提供

var testQuery = "SELECT * FROM Test WHERE date = @p0"; foreach (var c in db.Query(testQuery, date)) ... 

をする必要があります値はクエリ –

+3

です。これは論理です。私はあなたの代わりにあなたの 'コントローラ'に配置し、あなたのビューにモデルとして送信することをお勧めします。しかしそれはあなたの問題とは関係ありません。それはちょっとしたメモです。 – smoksnes

+0

@ IkramTurgunbaev-明らかに 'db.Execute'それを行う – Fabio

答えて

1

、すなわちクエリは、代わりにこのパラメータを追加する必要が代わりにプレーンな値

db.Query("... = @p", new SqlParameter('p', date)) 
関連する問題