2010-12-05 6 views
0

ASP.NET C# 코드에서이 sql 명령을 사용하면 현재 로그인 한 사용자의 코드 카트가 출력됩니다.SQL 명령 문제 - WHERE 절

내가 로그인 한 사용자의 ID를 얻고 문자열 변수에 저장 내 SQL 명령에서 사용 : 나는 '근처의 구문이 잘못되었습니다 "의 오류가 발생하고있어 그러나

BasketPage.SelectCommand = "SELECT tblBasketDetails.BasketID, tblBasketDetails.BookID, tblBooks.Title, tblBasketDetails.Quantity, tblBasket.UserID, tblBasket.CreatedDate FROM tblBasket INNER JOIN tblBasketDetails ON tblBasket.BasketID = tblBasketDetails.BasketID INNER JOIN tblBooks ON tblBasketDetails.BookID = tblBooks.BookID WHERE (tblBasket.UserID = " + CurrentUser + ")";

디'."

Visual Studio 2010의 쿼리 작성 도구를 사용하여 쿼리가 생성되었는데, 이것이 문제의 원인인지 알 수 없습니까?

+0

UserID의 데이터 유형은 무엇입니까? –

답변

3

매개 변수에서 단일 아포스트로피를 이중으로 바꾸어야합니다. 또한 매개 변수를 사용하지 않으면 SQL 주입 공격에 노출됩니다.

(tblBasket.UserID = '" + replace(CurrentUser, "'", "''")+ "') 

여기서는 CurrentUser가 문자열 값이라고 가정합니다.

+0

그런데 매개 변수를 사용하려면 CurrentUser 앞에 "@"기호 (예 : tblBasket.UserID = @CurrentUser)를 추가 한 다음 BasketPage.Parameters.AddWithValue ("@ CurrentUser", yourvaluehere)를 사용하십시오. – shamazing

+0

나는 BasketPage.Select()를 할 때 이렇게했다. 그것은 매개 변수가 필요하다는 것을 알려줍니다. – user527330

+0

매개 변수와 값을 추가 했습니까? BasketPage.Parameters.AddWithValue ("@ CurrentUser", yourvaluehere) – shamazing

0

귀하의 진술은 여러 수준에서 틀립니다 ..... 소개 책을 읽으십시오.

볼 수 있습니다 :

을 WHERE (tblBasket.UserID = "+ CurrentUser +") ";

확인 : 먼저 읽어"위키 백과에 공격 injectioon SQL을 "당신 만합니다. 모든 바보가 똑똑한 사용자 이름을 입력하여 데이터베이스를 해킹 할 수 있습니다. "라고 말합니다. 매개 변수 사용

상업용 고객 사이트 용으로 고객이 고소하는 경우,"중대한 방치 "(as as : 나는 단서가 없다. 나는 실제로) 유효한 법적 방어가 아닙니다. SQL 주입 공격은 요즘 기본적인 지식입니다.

둘째, 문자열을 함께 넣으려는 경우 사용자가 덤프하면 명령문은 유효한 SQL이 아닌> UserID = dumbo>를 읽습니다. 유효한 SQL에서는 일부 구분 기호 (예 : 'dumbo')에 문자열 (점보)을 넣어야합니다.

쿼리 이이 문제를 일으키는 경우, 내가 몰라 비주얼 스튜디오 2010에서 쿼리 건물을 사용하여 생산된다?

예, 그렇습니다. 근본적인 기술이 어떻게 작동하는지 알지 못해 톨게이트를 사용하는 것은 할 수있는 좋은 일입니다.

+0

때로는 상사가 우리가 이해하지 못하는 것을하도록 요청하기도합니다. 나는 그에게 너무 열심히하지 않을 것이다. – Ishpeck

+0

대학 프로젝트입니다. – user527330