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)을 만들지 않는 것이 더 중요하다.