사용자가 선택의 WHERE 조건을 결정할 수있는 기능을 생성해야합니다. 조건은 동적입니다.동적 WHERE 절 및 SQL 삽입
SQL 삽입 코드를 열지 않고도이를 수행 할 수있는 방법이 있습니까?
저는 C#/.NET Windows 응용 프로그램을 사용하고 있습니다.
사용자가 선택의 WHERE 조건을 결정할 수있는 기능을 생성해야합니다. 조건은 동적입니다.동적 WHERE 절 및 SQL 삽입
SQL 삽입 코드를 열지 않고도이를 수행 할 수있는 방법이 있습니까?
저는 C#/.NET Windows 응용 프로그램을 사용하고 있습니다.
아 두 단계를하지 않습니다. 주어진 컬럼 이름과 연산자는 직접적인 사용자 입력이 아닙니다. 예 : 목록 또는 라디오 그룹 등에서 선택했습니다. 다음 문자열 WhereClause = String.Format ("{0} {1} @ {0}", "Customer", "=");
이제 "Where Customer = @ Customer"가됩니다.
그런 다음 aparamer 고객을 추가하고 사용자 입력에서 설정할 수 있습니다.
공격 방법에는 몇 가지가 있지만 기준이 얼마나 복잡 할 수 있는지에 따라 다릅니다.
예, 열 이름과 연산자가 목록에서 선택됩니다. 지금 내 질문은 이것이 저장 프로 시저에서 가능하면 될 것입니다. – Rivka
대부분의 나쁜 일이 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
오른쪽 ... 필드와 연산자가 동적 일 때 어떻게 매개 변수를 사용할 수 있습니까? – Rivka
설명 - 매개 변수 사용 방법을 알고 있습니다. 여기서 문제는 매개 변수, 매개 변수 값 및 연산자가 동적이라는 것입니다. 그래서 평상시처럼 매개 변수를 추가 할 수는 없습니다. – Rivka
@Becky 방금 쿼리 식 표현에서 매개 변수를 추출하는 방법에 대한 일반적인 정보를 포함하도록 답을 편집했습니다. – dasblinkenlight
당신은 어떤 언어를 쓰고 있습니까? – Todd
사용중인 기술은 무엇입니까? .그물 ? PHP? 루비? ... 다른? – dknaack
내 게시물을 업데이트했습니다. – Rivka