2012-07-17 5 views
0

기본 ASP SQL 매개 변수화 - 매개 변수에서 작은 따옴표를 제거하려면 어떻게합니까?</p> <pre><code>SQL = "SELECT * FROM content WHERE Category LIKE ? ORDER BY SubDate ?" </code></pre> <p>SQL 쿼리 문자열은 다음 매개 변수가 코드에서 사용되는 : 다음과 같이 나는 매개 변수가있는 SQL 쿼리 문자열 클래식 ASP를 사용하고

Set cmd = Server.CreateObject("ADODB.Command") 
Set rsView = Server.CreateObject("ADODB.Recordset") 
cmd.ActiveConnection = MM_connContent_STRING 
cmd.Prepared = true 
cmd.CommandType = adCmdText 
cmd.CommandText = SQL 
cmd.CommandTimeout = 60 

cmd.Parameters.Append(cmd.CreateParameter("Category", 202, adParamInput, 30, qFilter)) 
cmd.Parameters.Append(cmd.CreateParameter("SubDate", 202, adParamInput, 10, myDateSort)) 

rsView.CursorLocation = adUseClient 
rsView.Open cmd, , adOpenForwardOnly, adLockReadOnly 
위의 코드는 하나를 제외하고 잘 작동

거대한 문제. "ORDER BY SubDate?" 부분 출력 "ORDER BY SubDate 'DESC'"DESC가 주변에 작은 따옴표가있는 경우 매개 변수이므로 추가됩니다. 위의 코드를 실행하면 잘못된 구문 오류가 발생합니다. 이는 DESC (사용자가 URL 쿼리 문자열을 통해 선택한 내용에 따라 ASC가 될 수도 있음) 주변의 작은 따옴표로 인해 발생합니다. 모든 SQL 매개 변수는 작은 따옴표로 출력됩니다. 특정 SQL 매개 변수에서 작은 따옴표를 제거하여 SQL 문자열에 구문 오류를 만들지 않으려면 어떻게합니까?

답변

4

키워드 (또는 식별자)를 매개 변수로 허용하는 것은 매우 드뭅니다. 제가 알고있는 하나의 프레임 워크가 없습니다. 단지 2 허용 값, 왜 당신은 단순히 쓰지 않는다 있기 때문에

는 :

SQL = "SELECT * FROM content WHERE Category LIKE ? ORDER BY SubDate " 
If myDateSort = "ASC" Or myDateSort = "DESC" Then 
    SQL = SQL & myDateSort 
Else 
    'whoops, value not allowed. raise error... 
End If 
'...rest of your code... 
+0

+1 니스 실용 아직 보안 솔루션, 내 투표를 가져옵니다. – AnthonyWJones

+0

빠른 답장을 보내 주셔서 감사합니다. 매개 변수화 된 쿼리로 이동하여 SQL 주입을 피하려고합니다. myDateSort는 URL 문자열을 통해 전달되는 사용자 정의 변수이므로 코드에 표시된대로 매개 변수 외부에서 myDateSort 변수를 직접 사용하면 사용자가 여전히 내 SQL 쿼리를 수정할 수 있다고 생각합니다. 이 올바른지? 다시 한 번 감사드립니다! – user1531027

+0

사실, 이제는 If 함수를 사용하여 myDateSort에 할당 된 값을 제어하고 있습니다. 나는 이것이 그 가치를 안전하게 지킬 것이라고 생각한다. – user1531027