2011-04-25 3 views
0

업데이트 : this preexisting question, and its answers,도 참조하십시오.이 질문은 사실상 복제본입니다.매개 변수가있는 쿼리를 사용할 수없는 경우 SQL 문자열을 이스케이프합니까?


나는 SQL 문

예를 들어,의 WHERE 조건 단편 소요 타사 API를 사용하고 있습니다 ThirdPartyFunction(where:"Category = 'abc'", top:5)

UI 또는 웹 서비스를 통해 전달되는 문자열이 있으며 SQL 주입 공격을 방지해야합니다.

매개 변수화 된 쿼리를 사용하지 않고 .NET 프레임 워크에서 SQL 문자열 (내가 아는)을 이스케이프 처리하는 대체 방법이 없으면 SQL 문자열을 수동으로 이스케이프 처리해야합니다.

나는 탈출 방법을 쓰는 가장 좋은 방법에 대한 아이디어가 있지만 가장 안전한 해결책을 찾고 있습니다.

+2

타사 API가 이미 클렌징을 수행하지 않습니까? 그들이 자신의 SQL과 유사한 질의어 (NQL)를 지원하는 NHibernate와 같은 것을 사용한다면, 당신은 자신의 클렌징을 할 필요가 없을 것입니다. –

+0

[매개 변수없이 SQL 주입 방지] (http://stackoverflow.com/questions/910465/avoiding-sql-injection-without-parameters) 및 [SQL 인용 부호를 사용하여 작은 따옴표 및 주변 사용자 입력을 이스케이프하여 보호 할 수 있습니까? 작은 따옴표?] (http://stackoverflow.com/q/139199/513811) –

+0

@Martin - 네, 대답도 있습니다. 게시하기 전에 검색 할 때 찾지 못했습니다. –

답변

1

매개 변수화 된 쿼리가 확실히 가장 안전 할 수 있지만 두 개의 작은 따옴표를 사용하여 작은 따옴표를 바꾸면됩니다. 따라서 사용자가 'abc'부분에 악성 쿼리를 입력하려고하면 문자열로 처리합니다.

어떤 타사 라이브러리를 사용하고 있습니까? 해당 메소드 호출에 대한 매개 변수화 기능도 제공하지 않았는지 확인 했습니까?

+0

제 3 자 라이브러리를 살펴본 후 여기에 이름을 지정하는 대신 별도의 질문을 게시 할 수 있습니다. 일반적으로 시나리오는 다른 프로그래밍 상황에서 잘릴 수 있으므로이 일반적인 질문에 대한 확실한 답을 원합니다. –

+0

@ John K : 확실한 대답은 도서관 자체가 수표를 이미 가지고 있는지 확인하는 것입니다. 그렇지 않다면 유일하게 안전한 대답은 라이브러리를 덤프하는 것입니다. – NotMe

+0

좋은 호출 Chris - 실제 SQL 호출을 검사합니다. 그러한 라이브러리를 덤프하는 것은 개발 관점에서 이상적이지만 고객이 도구를 선택하면 필 요한 도구를 사용하여 이러한 기이의 일부에 대한 프로그래밍 방식의 솔루션을 찾아야합니다. 동일한 최종 결과를 갖는 다른 종류의 메소드, 더 안전한 옵션이 API에있을 수 있습니다. –

관련 문제