2012-07-30 3 views
4

내 .net 3.5 mvc2 웹 응용 프로그램에 보안을 적용하고 있습니다. 내 웹 사이트는 사용자 인증을 포함하고 내가AntiForgeryToken은 어떻게 작동합니까?

$(document).ready(function() { 

var token = $('input[name=__RequestVerificationToken]').val(); 

    $.ajax({ 
    url: "/Home/getCurrentLanguage/" + Math.random(), 
     cache: false, 
     type: "POST", 
     async: false, 
     data: {"__RequestVerificationToken":token}, 
     success: function(data) { 
      if (data == "mr") { 
       alert("its Marathi"); 
      } else { 
       alert("its English huh !!!"); 
      } 
      return false; 
     }, 
     error: function(data) { 
      alert("some Error" + data); 
     } 
    }); 

}); 
을 쓴 내의 .js 파일 기능에서

<%= Html.AntiForgeryToken() %> 

을 쓴 내에서 .aspx 파일에서의 .js 파일

을 많은 아약스 호출을 구성하지 않습니다 내 컨트롤러에서

나는이 0 나를 위해 잘 작동

[AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken] 
    public JsonResult getCurrentLanguage(string id) 
    { 
     return new JsonResult 
     { 
      Data = "mr" 
     }; 

    } 

을 썼다하지만 질문이 2 개 있습니다
Q1. 올바른 접근 방법입니까? 내가 페이지 소스를 참조하면 ,이 코드

<input name="__RequestVerificationToken" type="hidden" value="WFd+q5Mz0K4RHP7zrz+gsloXpr8ju8taxPJmrLO7kbPVYST9zzJZenNHBZqgamPE1KESEj5R0PbNA2c64o83Ao8w8z5JzwCo3zJKOKEQQHg8qSzClLdbkSIkAbfCF5R6BnT8gA==" /> 

을 발견하지만 외부 HTML 파일을 생성 __RequestVerificationToken의 값을 복사하여 Ajax 호출에 통과 할 때, 나는이 오류를 얻고 것은
A는 안티 필요 - 위조 토큰이 제공되지 않았거나 유효하지 않습니다. 다음
질문 2. 런타임에서이 페이지가 복사 된 __RequestVerificationToken을 제공하고 있음을 어떻게 알 수 있습니까?

답변

2

이 "AntiForgeryToken"은 Cross-Site Request Forgery 공격을 방지하기위한 장소입니다. 이 시스템은 응용 프로그램에 사이트 간 스크립팅의 취약점이있는 경우 공격자가 해를 입을 수 있습니다.

이 토큰은 same-origin policy 때문에 공격자가 요청을 보낼 수 있지만 페이지에서 토큰을 읽을 수 없기 때문에 CSRF 공격을 방지합니다 (xss 취약점이없는 한).

Q2와 마찬가지로이 값은 사용자마다 고유해야하므로 페이지가로드 될 때마다 업데이트되어야합니다. 정적 값이라면 CSRF를 멈추는 데 쓸모가 없습니다. 왜냐하면 공격자는이 정적 값을 알 수 있기 때문입니다.

+0

브라우저의 쿠키가 __RequestVerificationToken을 유지하기 때문에 질문 2의 답을 얻었습니다. 그래도 웹 페이지에서 __RequestVerificationToken을 복사했지만 예외가 발생했습니다. 첫 번째 2 paras +1, 감사합니다. Q1의 대답을 기대하고, 내 접근 방식이 맞습니까? 또는 나는 더 많은 것을해야한다. –

+0

@ d.Siva. 값이 동적 인 경우 (다른 브라우저에서 해당 페이지를 방문하여 시도하십시오) 올바르게 점검 한 후 제대로 작동하는지 확인하십시오. – rook

+0

나는 크롬에서 테스트를 마쳤습니다. 즉, 파이어 폭스와 그 작업은이 접근법이 정확하다고 생각합니다.이 대답을 받아 들였습니다. –