최근 SQL 인젝션 공격에 취약한 인라인 SQL 삽입 문을 사용하여 고전적인 asp 웹 사이트를 상속 받았습니다.클래식 ASP SQL 삽입
이러한 삽입 문은 ADO 명령 개체를 통해 실행됩니다.
ADO 명령 개체의 Prepared 속성을 true로 설정하면 쿼리를 실행 전에 매개 변수화하여 SQL 주입 위험을 줄일 수 있습니까?
최근 SQL 인젝션 공격에 취약한 인라인 SQL 삽입 문을 사용하여 고전적인 asp 웹 사이트를 상속 받았습니다.클래식 ASP SQL 삽입
이러한 삽입 문은 ADO 명령 개체를 통해 실행됩니다.
ADO 명령 개체의 Prepared 속성을 true로 설정하면 쿼리를 실행 전에 매개 변수화하여 SQL 주입 위험을 줄일 수 있습니까?
이 링크는 유용 할 것입니다.
아니요, "외부"에서 직접 가져온 값이있는 SQL 문자열을 작성하면 "준비된 명령문"이 도움이되지 않습니다.
sSQL = "SELECT * from mytable where mycolumn = '" + querystring("value") + "'"
는 여전히 문제가 요구된다. 이 문제를 해결하는 유일한 방법은 쿼리의 매개 변수를 사용하는 것입니다.
난 당신이 다음, 사용자 입력을 소독 것을 통해 모든 요청 변수를 실행하는 함수를 작성하면된다 제안 무엇. 난 내를 썼을 때 나는 물건을 좋아했다 :
대부분의 SQL 주입 그래서 SQL 코드가 될 것이다 ' or 1=1 or a='
같은 것을 시도 할 것이다 :
SELECT * from mytable where mycolumn = '' or 1=1 or a=''
그래서 탈출 따옴표는 당신에 대해 걱정할 필요가 진짜 큰 하나입니다.
많은 사람들이 그 함정에 빠지게됩니다. 함수를 작성하면 코드가 읽기 어려워지며 미래의 증거는 아닙니다. 수년 전에 제작 한 모든 고전 ASP 사이트를 추적 할 방법이 없으며 사용하지 않을 수도있는 기능을 업데이트 할 수도 있습니다. ADO 매개 변수 또는 paramterised 저장 프로 시저를 사용할 수 있습니다. –
필자는 매개 변수가 모범 사례라는 것에 동의하지만 많은 코드를 빠르게 정리하려고하면 함수에서 모든 사용자 입력을 쉽게 래핑 할 수 있습니다. –
많은 수의 'oCmd.Parameters .CreateParameter (...) 문을 코드에 적용하고 솔직히 이런 상황에서 속도보다는 품질에 더 집중하는 것이 더 효과적이라고 생각합니다. 특히 작업을 두 번 할 시간이 없다면 더욱 그렇습니다. –
또한 'Owasp stinger'라는 고전적인 오픈 소스 프로젝트를 볼 수도 있습니다. SQL 주입에 도움이 될뿐만 아니라 헤더 삽입과 모든 웹 응용 프로그램에 공통적 인 보안 문제가 많이 있습니다.
+1 for owasp :) – gmaran23
여기에 또 다른 좋은 링크 및 예입니다.
http://blogs.iis.net/nazim/archive/2008/04/28/filtering-sql-injection-from-classic-asp.aspx
는 과거에 우리는 단지 SQL 주입 및 XSS에 대한 외부 입력을 처리하기 위해 몇 가지 기능을 만들었습니다. 그런 다음 천천히 모든 인라인 SQL을 저장 프로 시저로 변환했습니다.
[클래식 ASP SQL 삽입 방지] (http://stackoverflow.com/questions/149848/classic-asp-sql-injection-protection) – NotMe