2017-01-26 4 views
1

그래서 여기에 몇 가지 질문을했고 SQL injection vulnurable 코드를 사용하여 불에 구웠다. 사이트가 온라인 상태가 아니더라도 어쨌든 나는 그것을 고칠 것을 권고 받았다. 할 것.SQL 인젝션 cshtml

그래서 다음 코드를 사용하여 테스트 할 테스트 페이지를 만들었습니다.

var date = "2017-01-26"; 

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

지금까지, 단지이 페이지를 실행 그것은 나에게 오류를 제공하지 않지만, 시간이 아마 약 99 %는 내가 내 데이터를 표시하는 foreach을 사용하여 데이터베이스에서 무언가를 선택합니다.

A parameter is missing. [ Parameter ordinal = 1 ]

내가 잘못 뭐하는 거지 :

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

그리고 그것은 나에게 오류를 제공과 같이 foreach 문을 추가하여

? 그리고이 SQL 인젝션은 안전하지 않은가? PS. 이것은 MVC 유형 프로젝트가 아닙니다. 당신의 DB는 EF 상황, 기본 매개 변수 이름은 p0입니다 인 경우

+0

의 두 번째 매개 변수로 SqlParameter을 제공

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

을해야한다 value to query –

+3

이것은 논리입니다. 대신 컨트롤러에'Controller'를 넣고 모델로 보내보기를 권한다. 그러나 그것은 당신의 문제와 관련이 없습니다. 그것은 단지 측근입니다. – smoksnes

+0

@ IkramTurgunbaev- 명백하게'db.Execute' do – Fabio

답변

1

, 즉 쿼리 또는 당신이 매개 변수를 추가 할 필요가 대신 일반 값

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