2017-01-26 25 views
1

Так что я задал несколько вопросов здесь и был обжарен для использования вулканического кода SQL-инъекции, хотя сайт не будет подключен к сети. Мне было рекомендовано исправить это в любом случае, которое я сейчас пытаюсь делать.SQL Injection 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> 
} 

И, добавив Еогеасп как это дает мне ошибку:

A parameter is missing. [ Parameter ordinal = 1 ]

Что я делаю неправильно? И разве это даже инъекция SQL в противном случае? PS. Это не проект типа MVC.

+0

вам нужно добавить параметр значение по вашему запросу –

+3

Это логика. Я предлагаю вам вместо этого разместить его в вашем «Контроллере» и отправить его в качестве модели в ваше представление. Но это не связано с вашей проблемой. Это просто примечание. – smoksnes

+0

@ IkramTurgunbaev - очевидно 'db.Execute' сделать это – Fabio

ответ

1

Если дб EF контекст, имя параметра по умолчанию p0, т.е. запрос должен быть

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

альтернативно обеспечивают SqlParameter в качестве второго параметра вместо обычного значения

db.Query("... = @p", new SqlParameter('p', date))