http://groovysy.tumblr.com/post/14170180829/asp-net-mvc-antiforgerytoken
위에서 퍼온 글입니다.
위에서 퍼온 글입니다.
CSRF(Cross-site request forgery): 크로스 사이트 요청 위조
참조 Url http://itka.tistory.com/58
대응 방안
- 서버의 상태를 변경 하는 Request는 Post를 사용
- Url referer 검사.
- XSS 취약점(hole)을 만들지 말 것
- 요청 세션에 대한 검증(Validation)
- 중요한 페이지는 재 인증을 유도 할 것
Asp.net 에서는 System.Web.WebPages.dll 에서 요청 세션에 대한 유효성 검사
도구를 제공하고 있다. MVC에서도 동일하게 제공되고 있으며 Razor Helper와
필터(Attribute)를 통해 Token 생성 및 검사를 간단하게 처리 할 수 있다.
생성: @Html.AntiForgeryToken(), 검사: [ValidateAntiForgery()]
처리 프로세스
- Helper를 호출하면 서버에서는 난수(랜덤)를 생성한다.
- 페이지 요청을 한 사용자에게 쿠키를 제공하고 그 값에 만들어둔 랜덤 값을 채운다.
- 요청한 페이지를 응답하고 이 때 Form 안에 동일한 값의 hidden 필드를 삽입한다.
- 사용자가 다시 submit 요청을 하면 사용자의 쿠키 값과 hidden 값을 비교한다.
Token 값은 발생시간, HttpContext.User, Salt(부가 옵션)값 들이 포함된 객체를
Serialize 후 Base64로 인코딩 한 문자열이고 유효성 검사를 할 때에는 해당 값들 까지
꼼꼼히 검사하고 있다.(System.Web.WebPages.dll)
그러므로 Post 요청시 AntiForgeryToken을 적극적으로 사용 할 필요가 있다.
하지만 무엇보다 XSS 취약점(hole)을 만들지 않는 것이 더 중요하다.