2011-03-08 2 views
7

페이지를 새로 고치지 않고 여러 AJAX 양식 게시물을 만드는 페이지를 만들고 있습니다.한 페이지에서 여러 AJAX 요청이있는 ASP.NET MVC HTML.AntiForgeryToken()

저는 CSRF 공격으로부터 양식을 보호하기 위해 ASP.NET MVC HTML.AntiForgeryToken() 도우미를 사용하고 싶습니다. 페이지의 각 양식은 동일한 토큰을 공유 할 수 있지만 동일한 토큰을 사용하는 여러 요청을 허용합니까? 그렇지 않다면 폼을 보호하기 위해 새로운 토큰이나 다른 방법을 얻을 수있는 방법이 있습니까?

답변

7

동일한 토큰을 공유 할 수 있습니다. 물론 일반적으로 Ajax 호출을 CSRF 토큰을 요청에 연결하는 통합 된 방법으로 랩핑하는 것이 좋습니다 (POST가 안전하고 아키텍처 관점에서 훨씬 정확하지만 GET 또는 POST가 될 수 있음). Ajax가 비즈니스 입력 값에만 집중할 것을 요구하고 CSRF에 대해 걱정할 필요가 없습니다.

편집 :이 좋은 포스트 & 샘플을 읽어 자동 포장 jQuery를 1.5 사용하여 CSRF 보호까지 Ajax를 : http://www.codethinked.com/aspnet-mvc-ajax-csrf-protection-with-jquery-15

1

나는이 기사를 읽고 제안합니다 :

http://msmvps.com/blogs/luisabreu/archive/2009/02/09/the-mvc-platform-the-new-anti-forgery-token.aspx

http://blog.stevensanderson.com/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

그래서 귀하의 질문에 대답하는 - 당신이 그 일을하는 방법에 따라 달라집니다. AntiForgeryToken을 사용하여 토큰을 포함하면 숨겨진 필드 및 쿠키에 (새) 토큰이 생성됩니다. 그리고 CRSF 공격은 사용자가 조치 방법 (POST의 경우)을 ValidateAntiForgeryToken 속성으로 표시했다면이를 비교하여 탐지됩니다. 이제 각 요청에 대해 새 토큰을 만들어야한다는 점이 중요합니다. 따라서 AJAX 양식을 작성할 때 쿠키는 새로운 토큰 값으로 설정되므로 AJAX 응답에 새 토큰 필드가 포함되어 있는지 확인하고 브라우저 측에서 업데이트해야합니다. 더 나은 보호를 위해 다른 형태로 다른 염을 사용하도록 제안 할 것입니다.