PHP에서 오는, 내가 asp에 대한 사전 지식 없이이 1000 파일 asp 고전적인 웹 애플 리케이션에 대한 몇 가지 SQL 청소를해야하고 내가 그것을 해킹에 도착하기 전에 어떤 주요 gotchas 알고 싶습니다 asp 공백 수정을 준비/만들기 asp classic/sql 매개 변수에서 코딩하는 동안 조심하십시오. 좋은 개요 자원은 무엇이며, 무엇을주의해야합니까?asp classic에서 SQL injection에 대해 매개 변수화해야하는데, 변경하기 전에 어떤 점을 알아야합니까?
답변
나는 모든 데이터 액세스 또는 대부분의 데이터 액세스를 캡슐화하는 함수를 만들 것입니다. 이전 프로젝트에서는 SQL 문을 사용하고 Recordset 인스턴스를 반환하는
GetRecordset
함수를 만들었습니다. 이 함수에서는 데이터베이스를 열고 쿼리를 실행하고 데이터베이스를 닫은 다음 레코드 세트를 반환합니다. 이렇게하면 연결이 닫히게됩니다.SQL 문에 매개 변수를 정리하는 함수를 만들거나 매개 변수화 된 쿼리를 사용하는 것이 좋습니다. 쿼리를 다시 쓰고 싶지 않아서 연결을 사용하지 않는 코드에서, 사용하는 함수는
vbVarType
매개 변수를 필요로하므로 전달 된 값이 표시된 유형인지 확인하고 날짜가 그 형식으로 저장되도록합니다. 서버 문화에만 국한된 것은 아닙니다.작은 따옴표 뒤에 큰 따옴표가 오는 경우를 검색합니다. 다음은 그것도 모두와
Select ... Where StringOrDateCol = '" & Request.QueryString("GodKnowsWhat") & ...
를 찾고 있습니다, 당신은 모든 것을 잡을 수 없습니다. 예를 들어, Select ...Where NumericCol = " & Request.QueryString("GodKnowsWhat")
을 잡지 않을 것입니다. 마지막 검색은 Select
, Update
, Insert
및 Delete
을 검색하고 각 SQL 문을 검사하여 위의 # 2에서 작성한 기능을 사용하는지 확인하는 것입니다.
문자열 연결을 사용하여 SQL 쿼리에 매개 변수 값을 추가하지 않았는지 확인하십시오. ADO 명령 및 매개 변수 개체를 사용하는 방법에 대해 알아보십시오. 항상 SQL 쿼리 문자열에서 자리 표시자를 사용하고 명령에 매개 변수 개체를 추가하여 자리 표시 자의 값을 제공하십시오.
동의 함 ... place-holder와 예 : SqlDb.Command.Parameters.Add()를 통한 매개 변수화 된 쿼리는 큰 도움이 될 것입니다 ... 선택에 의존하지 않고 삽입 및 삭제합니다.
가능한 복제본 http://stackoverflow.com/questions/2113262/sql-injection-on-classic-asp-pages-with-parameterized-queries-text-fields –