2011-02-06 7 views
5

AntiForgeryToken은 CSRF 공격을 막는 데 사용됩니다. 그러나 MSDN의 링크를 통해 AntiForgeryToken이 정확히 무엇인지, 어떻게 작동하는지 또는 어떻게 작동하는지에 대해 많은 정보를 얻을 수는 없습니다.ASP.NET MVC3의 AntiForgeryToken 구현 세부 사항 및 근거는 무엇입니까?

내가 수집 한 것으로부터 웹 페이지와 쿠키 내에 해시가 생성됩니다. 그 중 하나 또는 둘 모두 해시 된 IPrincipal.Name을 사용하고 대칭 암호화를 사용합니다.

은 누구에게로 되거 수 다음 AntiForgeryToken가 내부적으로 어떻게 작동

  1. 는 추론 무엇입니까 보호하는 데 사용해서는 안됩니다 무엇
  2. 을 보호하기 위해 사용되어야한다 무엇 위의 # 1 구현 선택 뒤에?
    • 예 :
      • 는 구현은 사용자가 여러 탭을 열면
      • 이 구현 문제가 있습니까 "DoubleSubmit"쿠키 및 기타 일반적인 취약점으로부터 안전
      • SANS에서 제공하는 것과 다른 MSFT의 구현을 만드는 것
+0

CSRF가 무엇인지 궁금하십니까? 특히 MS가 어떻게 처리합니까? 아니면 일반적으로 어떻게 처리할까요? – CtrlDot

+0

@CtrlDot - MSFT 구현의 모든 세부 사항을 배우고 싶습니다. http://security.stackexchange.com에 가서 CSRF에 대한 정보를 얻고 쿠키를 두 번 제출할 수 있습니다. – LamonteCristo

답변

1

좋아, 내 최고의 기회 야.

1) 내부적으로 mvc는 RNG 암호화 방법을 사용하여 XSRF 토큰 역할을하는 128 비트 문자열을 만듭니다. 이 문자열은 양식의 어딘가에 숨겨진 필드뿐만 아니라 쿠키에 저장됩니다. 쿠키 이름은 응용 프로그램 경로 (서버 측)의 기본 64 인코딩 버전 인 __RequestVerificationToken + 형태로 표시됩니다. 소금 - - 값 (토큰 문자열) - 작성 날짜 의 틱 -이의 HTML 부분은 데이터 의 다음 조각 직렬화 할 AntiForgeryDataSerializer를 사용하는 사용자 이름을

(Context.User 것 같다) validate 메소드는 기본적으로 쿠키와 양식의 값을 deserialize하고 값 (salt/value/ticks/username)에 따라 비교합니다.

2/3)이 토론은 XSRF 토큰을 사용할시기와 그렇지 않은 경우에 더 중요하다고 생각합니다. 내 마음 속에서, 당신은 모든 형태에 이것을 사용해야합니다. 내가 이것이 문제의 양식에 실제로 충돌했는지 여부는 보호 할 수 없다고 생각할 수있는 유일한 것입니다. 앱 이름의 base64 인코딩을 알고 있으면 공격자가 XSRF 공격 중 쿠키를 볼 수 있습니다. 어쩌면 저의 해석은 틀린 것 같습니다.

4) 여기에서 찾고있는 것을 정확하게 모르는 경우가 있습니까? 세션에 XSRF 토큰을 저장하고 (이미 사용 가능한 경우) XSRF 토큰을 저장하고 그렇지 않은 경우 쿠키 접근 방식을 시도하는 메커니즘을 구축했을 것입니다. 사용 된 암호의 유형에 관해서는, 나는 이것을 이렇게 artcile 찾아 냈다. Pros and cons of RNGCryptoServiceProvider

관련 문제