2017-03-23 3 views
0

에서 나는 기존 ASP에서 사용되는 구문 분석 및 URL 매개 변수의 유효성을 확인하기 위해 다음과 같은 기능을 발견안전 URL 매개 변수 검증 ASP

FOR EACH field IN Request.QueryString 
     var_name = field 
     var_value = Request.QueryString(field) 
     var_value = Replace(var_value, "'", "'") 
     var_value = Replace(var_value,"""",""") 
     var_value = Replace(var_value, "&", "&") 
     var_value = Replace(var_value, "%", "%") 
     str = "Dim " & var_name 
     EXECUTE(str) 
     str = var_name & " = var_value" 
     EXECUTE(str) 
    NEXT 

이 나에게 이해가되지 않으며, 두 EXECUTE 문은 것 같다 주사 공격을 간청했다. (아직 나는 그걸 만들 시간이 없다.)

ASP 클래식에 대한 쿼리 문자열을 구문 분석하는보다 표준적이고 안전한 방법이 있습니까?

+0

그들은 쿼리 문자열에 위험한 문자를 인코딩하려고합니다. EXECUTE는 두려운 것처럼 보입니다. 저는 고전적인 ASP 프로그래머가 아니지만, 작성된 코드가 쿼리 매개 변수를 통해 반복되고 키/값 쌍에 {a-z, A-Z, 0-9}의 문자 만 포함되어 있는지 확인하는 방법이 있습니다. – TheGreatContini

+0

@TheGreatContini - 다국어 매개 변수를 지원해야하기 때문에 필자는 문자 허용 목록을 사용할 수 없다고 덧붙여 야합니다. 또한 이것이 완료 되었기 때문에 그것이 정확하거나 필요하다는 것을 의미하지는 않습니다. 내가 아는 한, IIS는 이미 일들을 올바르게 인코딩합니다 .... – feetwet

답변

1

로컬 변수에 값 (예 : Dim)을 저장하고 execute의 취약점에 노출되는 대신 값을 사전에 저장할 수 있습니다. 추가 할 때 쿼리 문자열에서 가져온 값을 인코딩 할 수 있지만 여기에는 마른 버전이 있습니다.

set qs = server.createObject("scripting.dictionary") 

for each q in request.querystring 
    if not qs.exists(q) then qs.add q, request.querystring(q) 
next