방법: 문자열에 HTML 인코딩을 적용하여 스크립트를 이용한 공격으로부터 웹 응용 프로그램 보호

Visual Studio 2010

업데이트: 2007년 11월

스크립트를 이용한 대부분의 공격은 사용자가 실행 코드나 스크립트를 응용 프로그램에 삽입할 수 있는 경우에 발생합니다. 기본적으로 ASP.NET에서는 폼 게시에 HTML이 포함된 경우 오류를 발생시키는 요청 유효성 검사를 제공합니다.

다음과 같은 방법을 사용하면 스크립트를 이용한 공격을 방지할 수 있습니다.

  • 폼 변수, 쿼리 문자열 변수 및 쿠키 값에 대해 매개 변수 유효성 검사를 수행합니다. 이 유효성 검사에는 두 가지 유형의 확인, 즉 올바른 형식으로 변환할 수 있는지 확인하는 작업(예: 정수로 변환, 날짜-시간으로 변환 등)과 예상 범위 또는 서식을 확인하는 작업이 포함됩니다. 예를 들어 정수 형식이어야 하는 폼 게시 변수의 경우 Int32.TryParse 메서드를 사용하여 해당 변수가 실제로 정수인지 확인해야 합니다. 또한 결과 정수를 검사하여 예상 값 범위 내에 포함되는지도 확인해야 합니다.

  • 값을 다시 응답에 쓸 때 문자열 출력에 HTML 인코딩을 적용합니다. 이렇게 하면 사용자가 제공한 모든 문자열 입력이 브라우저에서 실행 스크립트 코드 또는 해석된 HTML 요소 대신 정적 텍스트로 렌더링됩니다.

HTML 인코딩을 적용하면 HTML 요소를 실행하는 것이 아니라 표시만 하도록 HTML 예약 문자를 사용하여 HTML 요소가 변환됩니다.

문자열에 HTML 인코딩을 적용하려면

  • 문자열을 표시하기 전에 HtmlEncode 메서드를 호출합니다. 그러면 HTML 요소는 문자열 표현으로 변환되므로 브라우저에서 이를 HTML로 해석하지 않고 표시만 합니다.

    다음 예제에서는 HTML 인코딩을 보여 줍니다. 첫 번째 인스턴스에서는 사용자 입력이 표시되기 전에 먼저 인코딩됩니다. 두 번째 인스턴스에서는 데이터베이스의 데이터가 표시되기 전에 먼저 인코딩됩니다.

    a2a4yykt.alert_note(ko-kr,VS.100).gif참고:

    이 예제는 페이지에서 @ Page 특성 ValidateRequest="false"를 추가하여 요청 유효성 검사 기능을 해제하는 경우에만 실행할 수 있습니다. 프로덕션 응용 프로그램에서는 요청 유효성 검사 기능을 해제하지 않는 것이 좋으므로 이 예제를 검토한 후 다시 요청 유효성 검사를 사용하도록 설정해야 합니다.

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _
        As System.EventArgs) Handles Button1.Click
            Label1.Text = Server.HtmlEncode(TextBox1.Text)
            Label2.Text = _
                Server.HtmlEncode(dsCustomers.Customers(0).CompanyName)
    End Sub
    
    

    private void Button1_Click(object sender, System.EventArgs e)
    {
        Label1.Text = Server.HtmlEncode(TextBox1.Text);
        Label2.Text = 
            Server.HtmlEncode(dsCustomers1.Customers[0].CompanyName);
    }
    
표시: