2013-08-11 2 views
4

현재 저는 ASP .NET MVC 4 응용 프로그램에서 작업하고 있습니다. 제공된 [ValidateAntiForgeryToken] 및 해당 @Html.AntiForgeryToken()을 사용하여 양식을 사용하여 제출 된 숨겨진 필드를 POST로 생성합니다.MVC AntiForgeryToken은 이전에 생성 된 토큰을 다시 사용했습니다.

토큰을 대상에 숨겨진 필드로 제공하지 않으면 액션이 [ValidateAntiForgeryToken]으로 주석 처리되어 예상대로 오류가 발생하기 때문에 지금까지 메커니즘이 제대로 작동하는 것 같습니다.

그러나 나는 Firebug 또는 Chrome 검사기를 사용하여 생성 된 토큰을 여러 개 캡처 한 다음 메모장에 복사 한 다음 AntiForgeryToken을 사용하는 다른 페이지로 이동하고 기본적으로 숨겨진 필드를 이전 토큰 중 하나로 바꾸는 것이 이상하다는 것을 발견했습니다. 생성되면 오류가 발생하지 않습니다. 나는 누군가가 그 값을 얻을 수 있다면, AntiForgeryToken을 필요로하는 응용 프로그램의 어떤 형태로든 요청을 위조 할 수 있기 때문에 항상 1 : 1 관계 (페이지 숨김 필드 - ValidationAtServer)를 가질 것을 기대하고있었습니다.

토큰이 생성 된 후에는 동일한 토큰을 다시 사용할 수 없어야한다고 생각 했었습니다. 프레임 워크 자체의 보안 결함을 보았습니다.

누군가가 더 많은 통찰력을 제공 할 수 있다면 크게 감사하겠습니다. 그것.

답변

5

AntiForgeryToken은 세션 기반이므로 각 사용자는 동일한 토큰을 갖지만 다른 사용자는 다른 토큰을 갖습니다.이 설명은 당신에게 유용 할 수 있습니다 : AntiForgeryToken changes per request

+0

안드레이 나는 감정을 가지고 있었지만 어떻게하면 다음을 할 수 있을까요? HTML에서 AntiforgeryToken을 꺼내서 IIS Express를 종료하고 브라우저를 닫은 다음 프로젝트를 시작한 후에 이전에 포깅 한 동일한 위조 토큰을 다시 사용할 수 있습니다. – jcgarciam

1

위조 방지 토큰이 손상되지 않았으므로 정상적인 행동입니다. atacker가 토큰을 손상시킬 수 있다면 atacker는 이미 다른 tokes를 손상시킬 기회가 있다는 것을 의미합니다. 예 : 중간 공격에 남자. 기본적으로 각 요청마다 Antiforgery 토큰을 생성 할 필요가 없으며, 현재 페이지에서 Ajax 요청에 대해 이미 생성 된 토큰을 사용할 수 있습니다.