2010-12-30 4 views
0
Dim cmdSelect As New SqlCommand("SELECT DISTINCT [seat_remain] FROM [a1_ticket] WHERE serv_code =" & lab5.Text & "ORDER BY [Ticket_no] DESC", SQLData) 
+4

VB.NET 스 니펫과 SQL 쿼리가 모두 SQL 인젝션 세이프가 아닌 것 같습니다. http://imgs.xkcd.com/comics/exploits_of_a_mom.png –

+1

당신은 ** 무엇을 기대합니까 **? 그것은 ** 실제로 ** 무엇을합니까 ?? –

답변

3

누락 인용 :

Dim cmdSelect As New System.Data.SqlClient.SqlCommand("SELECT DISTINCT [seat_remain] FROM [a1_ticket] WHERE serv_code ='" & lab5.Text & "' ORDER BY [Ticket_no] DESC", SQLData) 
+1

'serv_code'는 정수가 될 수 있으므로 따옴표는 필요하지 않습니다. –

+3

@Uwe Keim : Scorpi0가 인용 부호가 아닌 경우에도 추가 된 공간이 필요했을 것입니다. – Chris

+0

나는 그것이 따옴표 문제라고 생각한다. 그러나 사실, 아마도 그것은 놓친 공간 일 것이다. 그걸 알아 차리지 못 했어 : p –

8

당신은 매개 변수화 쿼리 나 저장 프로 시저 대신 SQL 쿼리를 구성하는 문자열 연결을 사용하고 있습니다. 그것이 잘못된 것입니다. 개선 방법은 다음과 같습니다.

Dim cmdSelect As New System.Data.SqlClient.SqlCommand("SELECT DISTINCT [seat_remain] FROM [a1_ticket] WHERE serv_code = @serv_code ORDER BY [Ticket_no] DESC", SQLData) 
cmdSelect.Parameters.AddWithValue("@serv_code", lab5.Text) 

이제는 쿼리가 작동하지만 SQL 주입에 안전합니다.

관련 문제