2012-01-03 9 views
2

사용자가 선택의 WHERE 조건을 결정할 수있는 기능을 생성해야합니다. 조건은 동적입니다.동적 WHERE 절 및 SQL 삽입

SQL 삽입 코드를 열지 않고도이를 수행 할 수있는 방법이 있습니까?

저는 C#/.NET Windows 응용 프로그램을 사용하고 있습니다.

+0

당신은 어떤 언어를 쓰고 있습니까? – Todd

+0

사용중인 기술은 무엇입니까? .그물 ? PHP? 루비? ... 다른? – dknaack

+0

내 게시물을 업데이트했습니다. – Rivka

답변

1

아 두 단계를하지 않습니다. 주어진 컬럼 이름과 연산자는 직접적인 사용자 입력이 아닙니다. 예 : 목록 또는 라디오 그룹 등에서 선택했습니다. 다음 문자열 WhereClause = String.Format ("{0} {1} @ {0}", "Customer", "=");

이제 "Where Customer = @ Customer"가됩니다.

그런 다음 aparamer 고객을 추가하고 사용자 입력에서 설정할 수 있습니다.

공격 방법에는 몇 가지가 있지만 기준이 얼마나 복잡 할 수 있는지에 따라 다릅니다.

+0

예, 열 이름과 연산자가 목록에서 선택됩니다. 지금 내 질문은 이것이 저장 프로 시저에서 가능하면 될 것입니다. – Rivka

2

대부분의 나쁜 일이 where 조건의 값 부분에서 발생하기 때문에 매개 변수가있는 쿼리를 사용하면 SQL 주입 공격으로부터 사용자를 보호하는 데 많은 도움이됩니다.

select a,b,c,d 
from table 
where [email protected] and [email protected] -- this is generated dynamically 

그런 다음, @pa="hello"@pb="WORLD"을 결합하고 쿼리를 실행 :

조건 a=="hello" && b=="WORLD"을 부여 exampleg를 들어

, 이렇게. C#에서

, 당신은 원소 별 통과, 손에 where 조항의 메모리 내 표현으로 시작하고, 두 개의 출력 객체를 생성합니다 :

  • where 절 문자열 (실제 이름은 중요하지 않습니다. 실제 이름은 중요하지 않습니다.)
  • 이름이 값 쌍에 해당하는 사전입니다. where cl에 삽입 한 매개 변수 ause 및 표현식 표현에서 가져온 상수에 해당하는 값이 있습니다.

이러한 결과를 얻으려면 문자열을 사용하여 동적 쿼리를 준비하고 사전을 사용하여 매개 변수 값을 추가 한 다음 RDBMS 소스에 대해 쿼리를 실행합니다.

는이

select a,b,c,d 
from table 
where a='hello' and b='WORLD' -- This dynamic query is ripe for an interjection attack 
+0

오른쪽 ... 필드와 연산자가 동적 일 때 어떻게 매개 변수를 사용할 수 있습니까? – Rivka

+0

설명 - 매개 변수 사용 방법을 알고 있습니다. 여기서 문제는 매개 변수, 매개 변수 값 및 연산자가 동적이라는 것입니다. 그래서 평상시처럼 매개 변수를 추가 할 수는 없습니다. – Rivka

+0

@Becky 방금 쿼리 식 표현에서 매개 변수를 추출하는 방법에 대한 일반적인 정보를 포함하도록 답을 편집했습니다. – dasblinkenlight