기본적으로 XSS나 SQL injection에 대비하도록 권고를 하고 있는데,
IIS .NET을 사용하는 경우, 이에 대한 입력값 체크의 기본적인 기능이 있어 이를 소개하려고 한다.
(적용 되는 버전은 ASP .NET 1.1과 ASP .NET 2.0이다)
CF. http://www.asp.net/learn/whitepapers/request-validation/
-------------------------------------------------------------------------------------------------
일반적으로 공격자가 XSS취약점등을 이용하여 공격을 시도하고자 할 때,
입력값에
와 같은 스크립팅 구문을 넣는데,
만약 '<'와 같은 특수문자가 필터링 되지 않고 실행되는 경우에는 XSS 공격이 성공되게 된다.
-------------------------------------------------------------------------------------------------
일반적으로 공격자가 XSS취약점등을 이용하여 공격을 시도하고자 할 때,
입력값에
와 같은 스크립팅 구문을 넣는데,만약 '<'와 같은 특수문자가 필터링 되지 않고 실행되는 경우에는 XSS 공격이 성공되게 된다.
이와 같은 공격을 막기 위해서 .NET에서는 기본적으로 요청에 대한 validation checking을 한다.
따라서 그런 경우에는 각 웹 페이지에
같은 구문을 추가해 주어,
※ 만일 모든 웹에서 Request validation을 끄기 위해서는 web.config 파일에 아래와 같이 넣어 주어야 한다.

1. Default .net setting
아래와 같은 ASP .NET 코드를 가진 경우,

textbox에 helloworld!라는 구문을 넣으면 아래와 같이 정상 실행이 되지만,

textbox에
라는 구문을 넣으면 아래와 같이 에러 페이지로 던져진다.

2. Disabling request validation on some page
하지만, 특수한 웹 페이지의 경우에는 사용자의 입력값에 특수 문자를 허용해야 하는 경우가 있게 마련이다.
아래와 같은 ASP .NET 코드를 가진 경우,

textbox에 helloworld!라는 구문을 넣으면 아래와 같이 정상 실행이 되지만,

textbox에
라는 구문을 넣으면 아래와 같이 에러 페이지로 던져진다.
2. Disabling request validation on some page
하지만, 특수한 웹 페이지의 경우에는 사용자의 입력값에 특수 문자를 허용해야 하는 경우가 있게 마련이다.
따라서 그런 경우에는 각 웹 페이지에
같은 구문을 추가해 주어, 그 웹 페이지의 경우는 Request validation을 끈다는 attribute를 넣어 주어야 한다.
※ 만일 모든 웹에서 Request validation을 끄기 위해서는 web.config 파일에 아래와 같이 넣어 주어야 한다.

아래와 같이 request validiation을 끈 ASP .NET 페이지의 경우

를 입력값으로 넣어 실행 시켰을 때, 아래와 같이 정상적으로 실행이 된다.

하지만, 이와 같이 정상적으로 실행이 되는 경우에는 XSS 스크립트 실행이 되어 공격자의 공격이 성공할 수 도 있기 때문에,
일반적으로 사용자 입력값에 대한 추가적인 체크 routine이 필요하게 된다.
이를 위해 .NET에서는 htmlEncode()라는 함수를 제공하는데, 아래와 같이 사용하면 된다.
아래와 같이 request validation은 끄고, 사용자의 입력값을 받는 경우 htmlEncode() 함수 처리를 한 웹 페이지의 경우에는,

사용자가
와 같은 입력값을 넣었을 때에도,
스크립트 실행은 되지 않고 페이지는 정상적으로 실행됨을 확인할 수 있다.


를 입력값으로 넣어 실행 시켰을 때, 아래와 같이 정상적으로 실행이 된다.
하지만, 이와 같이 정상적으로 실행이 되는 경우에는 XSS 스크립트 실행이 되어 공격자의 공격이 성공할 수 도 있기 때문에,
일반적으로 사용자 입력값에 대한 추가적인 체크 routine이 필요하게 된다.
이를 위해 .NET에서는 htmlEncode()라는 함수를 제공하는데, 아래와 같이 사용하면 된다.
아래와 같이 request validation은 끄고, 사용자의 입력값을 받는 경우 htmlEncode() 함수 처리를 한 웹 페이지의 경우에는,

사용자가
와 같은 입력값을 넣었을 때에도,스크립트 실행은 되지 않고 페이지는 정상적으로 실행됨을 확인할 수 있다.

No comments:
Post a Comment