2011-10-26 5 views
2

크로스 사이트 요청 위조를 방지하기 위해 일부 양식에서 AntiForgeryToken을 사용하기 시작했습니다. 그러나 나는 이상한 행동을하고 있는데, 이것이 버그인지 혹은 나에게 뭔가 잘못하고 있는지 명확히하고 싶었다. 내 양식에 Html.AntiForgeryToken() 통화를 사용하고 있습니다. 그런 다음 폼이 게시 할 작업 메서드에서 [ValidateAntiForgeryToken] 특성을 사용합니다. 나는이 시점에서 소금을 사용하지 않고있다.AntiForgeryToken 및 ValidateAntiForgeryToken에서 예기치 않은 동작이 발생했습니다.

내 생각에 __RequestVerificationToken이라는 이름의 숨겨진 입력과 동일한 값을 포함해야하는 __RequestVerificationToken_Lw__이라는 쿠키가 생성됩니다.

나는 그러나 경험하고 행동은입니다 :

  1. 쿠키는 항상 상관없이 페이지
  2. 숨겨진 입력 당신이 얻을 때마다 다른 값을 가진다을 GET 몇 번이나 같은 값이 없습니다 페이지
  3. ValidateAntiForgeryToken은 CSRF 시나리오의 다른 사이트에서도 항상 유효성을 검사합니다.
  4. 내가 외국 사이트에 숨겨진 입력 값을 변경하면, 토큰 (예상 행동을하지만, 숨겨진 입력/쿠키 값이 다를 때 왜 을 확인합니까?) 확인하지 않습니다

누구나 아이디어가 있습니까?

+0

이 좋아, 단지 발견을 http://stackoverflow.com/questions/7186253/why-is-antiforgerytokens-hidden-field-not-same-as- 그것들은 다른 방식으로 직렬화된다는 것을 나타내는 my-cookies-on-my-machine이기 때문에 다른 값을 포함하고있는 것으로 보입니다. 그러나 이것이 왜 쿠키 값이 변경되지 않는지 설명하지 못합니다. (삭제하기 전까지 페이지를 다시 얻을 때까지 새로운 값이 생성됩니다.) 입력 값이 변경되거나 항상 유효성 검사를하는 이유는 무엇입니까? – coalvilledave

+0

이 동작은 보안 요청으로 만 발생하는 것 같습니다. – coalvilledave

답변

2

3 번 CSRF 시나리오에서 숨겨진 필드를 포함하고 있습니까?

AntiForgeryToken의 안전성은 숨겨진 입력이 도메인에서 제공하는 페이지에만 존재하며 다른 도메인에서 복사하거나 캡처 할 수 없다는 것입니다. 숨겨진 입력을 전달하는 테스트를 조롱했다면 유효한 테스트가 아닙니다.

난 당신이 필 Haack에서이 글을 읽으십시오 : Anatomy of a Cross-site Request Forgery Attack

+0

CSRF 사이트에서 숨겨진 양식 필드와 함께 코드를 그대로 둔 채 양식을 제출하면 항상 서버에서 유효성이 검사됩니다. 분명히 코드가 없으면 예상대로 유효성을 검사하지 않습니다. 여전히 쿠키 값이 동일하게 유지되는 이유는 여전히 알 수 없습니다. – coalvilledave

관련 문제