CSSI 취약점 검토 ASP 코드 방법

기술 자료 번역 기술 자료 번역
기술 자료: 253119 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

요약

이 문서에서는 확인하는 방법 및 사용하여 사이트 간 스크립팅 보안 문제 (CSSI) 취약합니다 올바른 ASP (Active Server Pages) 응용 프로그램에 대해 설명합니다. 제대로 유효성을 또는 서식이 지정된 유일한 입력 공격에 취약한 응용을 프로그램을 만듭니다.

추가 정보

다음 단계를 도움을 CSSI 가능성이 있는 ASP 응용 프로그램을 수정:
  1. 표시할 HTML 생성하는 ASP 코드를 찾습니다. ASP HTML 두 가지 방법으로 출력에 씁니다:
    Response.Write
    					
    - 및 -
    <% =
    					
  2. HTML 출력이 입력된 매개 변수가 포함되어 있는지 확인하십시오. 이러한 매개 변수는 다양한 원본에서 가져올 수 있습니다. 다음 목록에는 일반적인 입력된 소스:

    표 축소표 확대
    입력된 소스예제 ASP 코드 액세스 방법
    Request.Form 컬렉션
    Response.Write Request.Form("username")
    									
    Request.QueryString 컬렉션
    <%=Request.QueryString("username")%>
    									
    Response.Write Request.QueryString("username")
    									
    <a href="http://mysite/showuser.asp?username=<% = 
    Request.QueryString("username") %>">mypage</a>
    									
    <a href="http://mysite/mypage.asp"><%=Request.QueryString("url")%></a>
    									
    요청 개체
    Response.Write("username")
    									
    데이터베이스/데이터 액세스 메서드
    Do While Not rst.EOF
    	Response.Write rst("myfield") & "<br>"
    	rst.MoveNext
    Loop
    									
    쿠키 컬렉션
    Response.Write Request.Cookie("username")
    									
    세션 및 응용 프로그램 변수
    Response.Write Session("username")
    									
  3. 일부 입력을 사용하여 HTML로 생성하는 ASP 코드를 찾을 때 특정 응용 프로그램을 위한 솔루션을 평가해야 합니다. 아래의 해결 CSSI 방지 시작하는 데 도움이 되는 몇 가지 일반적인 개념을 제공합니다.

    유의하십시오 필터링 또는 인코딩, 문자 필터를 확인하여 적절한 특수 문자를 사용할 수 있도록 웹 페이지 집합을 지정해야 합니다. 웹 페이지에 삽입된 데이터가 간주되는 특수 특정 문자 집합 (charset) 기준으로 바이트 시퀀스를 필터링해야 합니다. 일반적인 문자는 ISO 8859-1, 초기 버전의 HTML과 HTTP 기본. 이러한 매개 변수를 변경할 때 계정 지역화 문제를 고려해야 합니다.
    • HTMLEncode 메서드를 사용하여 디스플레이 생성할 때 입력된 매개 변수를 인코딩합니다.

      일반적으로, 입력된 매개 변수가 있는 HTMLEncode 사용하여 대부분의 CSSI 공격은 방지할 수 있습니다. HTMLEncode 작동 사용하여 해당 문자를 나타내는 HTML HTML 변수를 특별한 의미가 있는 문자를 바꿉니다 (예를 들어, &, = ="). 인코딩할 수 있는 데이터만 하는 참고 및 전체 문자열을 입력하십시오.
      <% Response.Write("Hello visitor <I>" +
            Server.HTMLEncode(Request.Form("UserName")) +
            "</I>");
      %> 
      						
    • HTTP_REFERER는 요청을 제출할 수 도메인 제한할 수 있습니다.

      HTTP_REFERER는 리디렉션 발생한 경우 원래 요청 URL이 포함된 문자열을 반환합니다. 채워진 폼에 받고 올바른 위치에서 상태로 거부할 때 웹 서버 참조 페이지 필드를 확인합니다. 다음과 같은 방법으로 해당 HTTP_REFERER 확인할 수 있습니다:
         <%
         If (Request.ServerVariables("HTTP_REFERER") = "") Or _
            (Left(Request.ServerVariables("HTTP_REFERER"),42) <> _
            "http://www.myserver.com/AppDir/mainfrm.asp") Then
            Response.Redirect "http://www.myserver.com/AppDir/mainfrm.asp"
         End If
         %> 
      							
      참고 : 일부 제한이 참조 페이지 필드:
      • 합법적인 양식 전송을 차단하는 위험이 있습니다.
      • 링크를 전자 메일 또는 URL을 없는 책갈피를 가져올 있습니다.
      • 의도적으로 브라우저는 같은 참조 페이지 필드를 지우십시오 HTTPS 요청 중에 있습니다.
    • URLEncode를 사용하여 입력된 매개 변수로 받은 URL 인코딩합니다.

      URLEncode 메서드는 URL 인코딩 지정된 문자열에 이스케이프 문자를 포함하여 규칙을 적용합니다. 들어오는 URL을 이를 표시하기 전에 인코딩해야 합니다. 다음은 URLEncode에 대한 샘플입니다:
      <%
            var BaseURL = http://www.mysite.com/search2.asp?searchagain=;
            Response.write("<a href=\"" + BaseUrl +
            Server.URLEncode(Request.QueryString("SearchString")) +
            "\">click-me</a>");
      %>
      						
    • 입력된 매개 변수 특수 문자를 수정하거나 제거하십시오. 특수 문자는 다음:
      < > " ' % ; ) ( & +
      							
      직접 또는 표시하면 이를 브라우저에 응용 프로그램에 따라 읽을 때 문자를 수정하거나 제거할 수 있습니다.

      이 샘플은 특수 문자를 필터링할 JavaScript:
      function RemoveBad(strTemp) { 
      	strTemp = strTemp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,""); 
      return strTemp;
      } 
      							
      이 예제 Visual Basic 스크립트 버전 버전 5.0 정규식을 사용하여 특수 문자를 필터:
      Function ValidateTags(QueryString)
      	Dim o
      	Set o = CreateObject("VBScript.RegExp") ' -> VB Script 5.0
      
      	Dim sBad
      
      	sBad = "(<\s*(script|object|applet|embed|form)\s*>)"   ' <  script xxx >
      	sbad = sbad & "|" & "(<.*>)"
                   ' >xxxxx<  warning includes hyperlinks and stuff between > and <
      	sbad = sbad & "|" & "(&.{1,5};)"   ' &xxxx;
      	sbad = sbad & "|" & "eval\s*\("    ' eval  ( 
       	sbad = sbad & "|" & "(event\s*=)"  ' event  =
      	
      	'Now lets check for encoding
      	sbad = Replace(sbad,"<", "(<|%60|<)")
      	sbad = Replace(sbad,">", "(>|%62|>)")
      	
      	o.IgnoreCase = True 'ignore case of string
      	o.Global =False 'stop on first hit
      
      	o.Pattern = sBad
      
      	ValidateTags = o.Test(QueryString)
      
      	Set o = Nothing
      End Function
      						

참조

자세한 내용은 다음 권고를 에서 해당 컴퓨터 응급 응답 팀 (CERT) Carnegie Mellon 대학 시 참조하십시오.
http://www.cert.org/advisories/CA-2000-02.html
자세한 내용은 Microsoft 기술 자료에 있는 문서를 보려면 아래 문서 번호를 클릭하여:
252985웹 응용 프로그램에 대한 사이트 간 스크립팅 보안 문제 방지하는 방법
253121CSSI 취약점 검토 MTS/ASP 코드 방법
253120검토 방법 CSSI 취약점 Visual InterDev 생성한 코드
253117Internet Explorer 및 Outlook Express CSSI 취약점 방지하는 방법
Microsoft는 기술 지원을 찾을 수 있도록 타사 연락처 정보를 제공합니다. 이 연락처 정보는 예고 없이 변경될 수 있습니다. Microsoft는 타사 연락처 정보의 정확성을 보증하지 않습니다.

속성

기술 자료: 253119 - 마지막 검토: 2005년 7월 8일 금요일 - 수정: 1.3
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Active Server Pages 4.0
키워드:?
kbmt kbcodesnippet kbcssi kbhowto kbsecurity kbsecvulnerability KB253119 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com