상세 컨텐츠

본문 제목

ASP.NET 잠재적 위험이 있는 Request.Form 값을 발견했습니다.

Web Development

by thankee 2008. 10. 12. 21:25

본문

Form의 데이터를 Request할때, Form값에 태그가 포함 되어 있을 경우 다음과 같은 에러를 발생시킵니다.

클라이언트 (txtContent="<STRONG>Content</STRONG>...")에서 잠재적 위험이 있는 Request.Form 값을 발견했습니다.

Form의 값으로 태그와 몇몇 특수문자들을 그대로 전송받아 처리하게되면 XSS나 SQL Injection과 같은 공격을 회피하지 못하거나, 공격자에 의해 사이트가 변조 당하는 등의 문제가 발생할 수 있습니다.

따라서 ASP.NET에서는 Request한 값을 validate, 즉 유효성을 검사하여 사용자에게 알림으로서 보다 견고한 웹 어플리케이션을 구축할 수 있도록 하고 있습니다. 이 에러를 처리하는 방법으로는 다음과 같이 세가지 방법이 있으며, 첫 번째 방법이 가장 안전하고 권장되는 방법입니다.

1. Client에서 Form값을 전송하기 전 또는 Request한 값을 사용하기 전에, 특정 문자들을 제거하거나 HTML Encoding 등을 사용하여 특수문자들을 다른문자로 치환하는 방법입니다. Javascript 또는 Server Side Script 에서 제거할 수 있으며 개발자가 필요에 따라 선택하면 됩니다.

2. 특정페이지에서만 에러 발생을 무시하는 방법입니다. 에러가 발생하는 페이지의 Page 지시자에 validateRequest="false" 를 추가하면 해당 페이지에서는 이 에러가 발생하지 않게 됩니다.

<%@ Page
     language
="C#" Codebehind="...." AutoEventWireup="true" Inherits="..."
     validateRequest="false" %>

3. 전체 웹 어플리케이션에 해당 에러가 나타자니 않게 하는 방법입니다. web.config에서 <system.web>엘리먼트 내부에 <pages validateRequest="false" />를 넣어두면 모든 페이지에서 해당 에러는 발생하지 않게 됩니다.
<?xml version="1.0"?>
<configuration>
    <appSettings/>
    <system.web>
        <pages validateRequest="false" />
    </system.web>
    ....
</configuration>

관련글 더보기