2009-10-06 4 views
7

최근 SQL 인젝션 공격에 취약한 인라인 SQL 삽입 문을 사용하여 고전적인 asp 웹 사이트를 상속 받았습니다.클래식 ASP SQL 삽입

이러한 삽입 문은 ADO 명령 개체를 통해 실행됩니다.

ADO 명령 개체의 Prepared 속성을 true로 설정하면 쿼리를 실행 전에 매개 변수화하여 SQL 주입 위험을 줄일 수 있습니까?

+2

[클래식 ASP SQL 삽입 방지] (http://stackoverflow.com/questions/149848/classic-asp-sql-injection-protection) – NotMe

답변

6

아니요, "외부"에서 직접 가져온 값이있는 SQL 문자열을 작성하면 "준비된 명령문"이 도움이되지 않습니다.

sSQL = "SELECT * from mytable where mycolumn = '" + querystring("value") + "'" 

는 여전히 문제가 요구된다. 이 문제를 해결하는 유일한 방법은 쿼리의 매개 변수를 사용하는 것입니다.

-2

난 당신이 다음, 사용자 입력을 소독 것을 통해 모든 요청 변수를 실행하는 함수를 작성하면된다 제안 무엇. 난 내를 썼을 때 나는 물건을 좋아했다 :

  • 탈출 따옴표,
  • 제거;
  • 문장의 끝 부분을 주석 처리 할 수 ​​없는지 확인하십시오.

대부분의 SQL 주입 그래서 SQL 코드가 될 것이다 ' or 1=1 or a=' 같은 것을 시도 할 것이다 :

SELECT * from mytable where mycolumn = '' or 1=1 or a='' 

그래서 탈출 따옴표는 당신에 대해 걱정할 필요가 진짜 큰 하나입니다.

+1

많은 사람들이 그 함정에 빠지게됩니다. 함수를 작성하면 코드가 읽기 어려워지며 미래의 증거는 아닙니다. 수년 전에 제작 한 모든 고전 ASP 사이트를 추적 할 방법이 없으며 사용하지 않을 수도있는 기능을 업데이트 할 수도 있습니다. ADO 매개 변수 또는 paramterised 저장 프로 시저를 사용할 수 있습니다. –

+0

필자는 매개 변수가 모범 사례라는 것에 동의하지만 많은 코드를 빠르게 정리하려고하면 함수에서 모든 사용자 입력을 쉽게 래핑 할 수 있습니다. –

+1

많은 수의 'oCmd.Parameters .CreateParameter (...) 문을 코드에 적용하고 솔직히 이런 상황에서 속도보다는 품질에 더 집중하는 것이 더 효과적이라고 생각합니다. 특히 작업을 두 번 할 시간이 없다면 더욱 그렇습니다. –