2013-04-24 3 views
16

우리는 ASP.NET MVC 서버 앱에 게시물을 작성하는 iOS 모바일 앱을 objective-c로 작성하고 있습니다. iPhone에서 HTTP 스택 (및 쿠키 등)은 Safari와 공유되는 것으로 보입니다. 이로 인해 우리는 XSRF 공격을받을 수 있습니다. 그래서 실수하지 않는 한 위조 방지 토큰으로 POST를 보호하고 컨트롤러 방법을 ValidateAntiForgeryTokenAttribute으로 보호해야합니다.AntiForgery.GetTokens : oldCookieToken 매개 변수의 용도는 무엇입니까?

본인은 위조 지폐 토큰이 생성되고 검증되는 메커니즘을 제대로 이해하지 못한다고 말하면서이 질문에 답할 것입니다 ... 특히이 문맥에 사용 된 '논스 (nonce)'라는 용어는 다소 신비 롭습니다.

클라이언트에 HTML을 제공하지 않기 때문에 @Html.AntiForgeryToken() 표준을 사용할 수 없으므로 대신 AntiForgery.GetTokens을 사용하여 클라이언트에 토큰을 확보하고 배포해야합니다. 신비한 첫 번째 매개 변수는 oldCookieToken입니다. 지금은 null으로 설정하고 모든 것이 잘 작동하는 것처럼 보입니다. 그래서 누구나 말해 줄 수 ... 알고리즘을 생성하는 토큰에 오래된 토큰을 사용하는 것은 무엇입니까? iOS 앱에 하나의 토큰 만 발행되고 여러 게시물에 대해 재사용되는 경우 문제가 될 수 있습니까?

답변

17

AntiForgery.GetTokens은 유효성 검사를 위해 이전 쿠키 토큰을 다시 사용하려고 시도합니다. 따라서 이미 재사용 할 유효성 검사 토큰을 가지고 있다면 새로운 유효성 검사 토큰을 생성하는 대신 유효성 검사 토큰을 사용하려고 시도 할 것입니다. 이전 토큰이 유효하지 않으면 새 토큰을 생성하고 대신 사용합니다.

따라서 null에서 oldCookieToken을 전달하는 것이 유효합니다. GetTokens은 항상 새로운 쿠키 토큰을 생성합니다.

+0

글쎄 -이게 유용하다는 걸 알았어. 이유가 확실하지 않은 이유를 답으로 표시하지 않았습니다. 그래도 고마워. –

+0

@PaulDeen : 이제 :-) – spender

+3

참고 : 유효한 oldCookieToken을 전달하면 newCookieToken은 항상 비어 있으며 oldCookieToken과 같은 값이 아닙니다. – Alex