2013-03-28 3 views
0

SQL 문을 매개 변수화하여 Classic ASP/VBScript 웹 사이트의 보안을 강화하려고합니다.

나는 다음과 같은 기능이 있습니다
어떻게 ADODB.CommandObject를 ADODB.RecordSet과 함께 사용할 수 있습니까?

 
Set rs = SecureOpenUpdateableRS("SELECT CustID, LastActive, LoggedIn, SessionID FROM tblLogins WHERE EMail = ? AND PWord = ?", strEMail, strPassword) 

I : 내가 가진 함수를 호출 할 때

Function SecureOpenUpdateableRS(strSQL, strParam1, strParam2) 
    Dim rs 
    Dim cmdOB 
    Set cmdOB = Server.CreateObject("ADODB.CommandObject") 
    With cmdOB 
     .ActiveConnection = cnDZ 
     .CommandText = strSQL 
     .Parameters(0).value = strParam1 
     .Parameters(0).value = strParam2 
    End With 
    Set rs = Server.CreateObject("ADODB.Recordset") 
    rs.Open cmdOB.Execute, , adOpenKeyset, adLockPessimistic 
    Set SecureOpenUpdateableRS = rs 
    Set rs = Nothing 
End Function 

:

Function OpenUpdateableRS(strSQL) 
    Dim rs 
    Set rs = Server.CreateObject("ADODB.Recordset") 
    rs.Open strSQL, cnDZ, adOpenKeyset, adLockPessimistic, adCmdText 
    Set OpenUpdateableRS = rs 
    Set rs = Nothing 
End Function

내가 좋아하는 무언가로 변환하려는를 "500 - 내부 서버 오류"가 발생합니다. 이는 아마도 서버에서 디버깅을 사용할 수 없습니다.
어떻게 원래의 기능을 손상시키지 않고 더 안전하게 만들 수 있을지에 대한 아이디어가 있습니까?

답변

1

매개 변수를 만들어 명령 매개 변수 컬렉션에 추가해야합니다. 값을 (같은!) 매개 변수에 할당하는 것만으로는 효과가 없을 수 있습니다. 샘플 용 Google; 아마도 this VB! sample이 시작됩니다.

추가 : 당신은 당신이 VarType(value) 상수를 매핑 할 수 있습니다 함수에 올바른/최대로 지정된 매개 변수 값을 전달하면

  1. :이

    내가 매개 변수 유형을 도출하기 위해 두 가지 전략을 생각할 수 매개 변수 유형 상수

  2. 명령 텍스트의 필드 이름을 기반으로 SELECT를 수행하는 경우 레코드 세트의 필드 .Type을 매개 변수에 매핑 할 수 있습니다 타입 상수

모든 가능한 경우에이 권리를 얻는 것은 쉬운 일이 아닙니다. 나는 값과 원하는 유형의 쌍을 함수에 전달할 것이다.

+0

빠른 응답 감사합니다. 입력 매개 변수의 유형에 대해 확신하지 않고 매개 변수화 된 명령문을 사용할 수있는 방법이 있습니까? – Vinayak

+0

이 StackOverflow 페이지의 코드처럼 : http://stackoverflow.com/questions/11020846/classic-asp-protection-against-sql-injection – Vinayak

관련 문제