2014-07-23 5 views
8

MVC 5의 ValidateAntiForgeryTokenAttribute를 사용하여 위조 방지 기능을 구현했습니다. 정상적으로 작동하지만 앞으로는 더 많은 "웹 팜"방식의 호스팅으로 이동할 수 있습니다. 개발시 응용 프로그램을 실행하고 양식으로 이동 한 다음 Visual Studio에서 응용 프로그램을 다시 시작하여 웹 서버를 다시 시작한 다음 양식을 제출하면 System.Web.Mvc.HttpAntiForgeryException이 발생하지 않습니다.웹 서버를 다시 시작할 때 MVC 위조 토큰은 어떻게 생존합니까?

우리 응용 프로그램은 다른 세션 상태를 사용하지 않습니다. 누군가 내 서버가 어떻게 중단했는지 이해할 수 있습니까? 내 web.config 또는 다른 곳에서는 machineKey를 정의하지 않습니다. 개발 환경에서 실행하는 것과 관련이 있습니까?

내가 찾을 수있는 유일한 참조는 이전 버전의 MVC 용이므로 지금 다른 방식으로이 문제가 해결되는지 궁금합니다.

이 기능이 작동하기 때문에 기쁩니다. 그러나 이유를 이해해야합니다.

답변

2

서버 자체에 아무 것도 기억하지 않습니다. 그럴 필요가 없습니다. 여기에 직장에서

두 가지 사항

  • 형태 숨겨진 입력
  • 쿠키

이것은 즉, 사용자는 다음 그것을에 AntiForgeryToken,있는 페이지를 방문 할 경우 서버가 다시 시작되면 사용자와 양식의 __RequestVerificationToken이 여전히 동일하기 때문에 아무런 문제가 없습니다.

실제 보안 토큰AntiForgeryToken 개체 내에 저장된 해시 키입니다. 이 개체는 Base 64으로 serialize되며 __RequestVerificationToken의 값을 볼 때 표시되는 개체입니다. 보안 키는 매번 저장되기 때문에 서버가 재설정하더라도 값은 여전히 ​​해당 객체 안에 있습니다. 그런 다음 토큰의 유효성을 검사하기 위해 키를 검색하고 비교합니다.

이 과정에서 암호 해독이 없습니다. 토큰을 비 직렬화하고 보안 키를 읽고 비교합니다. 보안 키가 인데은 암호화되지 않았으므로 은 해시 된이므로 해독 할 수 없습니다. 단지 비교했다.

+0

고마워요. 나는 두 값을 비교한다는 것을 알고 있지만 IIS를 다시 시작할 때 값을 해독하는 데 사용 된 암호화 키가 다시 생성 된 것으로 생각됩니다. 키가 새롭기 때문에 값을 해독 할 수 없어야합니다. – DustinA

+0

아, 네가 무엇을 요구하는지 알 겠어. 좋은 질문입니다. 내 대답을 업데이트 할게. –

+0

답변을 작성하는 데 시간을 내 주셔서 감사하지만 정확한지 확신 할 수 없습니다. 이 Microsoft 웹 사이트는 "anti-XSRF 토큰의 페이로드는 암호화되고 서명되었습니다"라고 말합니다. 다음은 페이지의 URL입니다. http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages. 내 경우에는 무슨 일이 벌어지고있는 것 같아요. MachineKey는 암호화 및 해독에 사용되어 실제로 익숙한 것처럼 웹 사이트 또는 앱 풀을 다시 시작하는 사이에 변경되지 않습니다. 나는 아직 그것을 뒷받침 할 수있는 문서를 찾을 수 없지만 그것이 내가 생각하는 것입니다. – DustinA