2009-09-10 2 views
16

ASP.NET MVC 1.0에는 교차 사이트 요청 위조 보안 문제를 처리하기위한 새로운 기능이 있습니다.위조 방지 토큰 염의 사용은 무엇입니까?

 <%= Html.AntiForgeryToken() %> 
[ValidateAntiForgeryToken] 
public ViewResult SubmitUpdate() 
{ 
    // ... etc 
} 

새 양식이 렌더링 될 때마다 html 양식에서 생성 된 토큰이 계속 변경됩니다.

이 토큰이 어떻게 생성되는지 알고 싶습니까? 그리고 일부 소프트웨어를 사용하여이 사이트를 검사하면 다른 보안 문제가보고됩니다. 세션 고정. 왜? 토큰은 변경된 상태이므로이 문제는 어떻게 발생합니까?

그리고 antiForgeryToken에 대한 "소금"이라는 또 다른 함수가 있지만, 실제로 이것을 어떻게 사용했는지 알고 있습니다. 심지어 "소금"을 사용하여 토큰을 생성하지 않아도 토큰이 항상 변경됩니다 그렇다면 왜 그런 기능을합니까?

답변

19

많은 : http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

이 크로스 사이트 요청 위조 (CSRF)을 방지하는 것입니다. '저장'을 클릭하여 양식을 작성하고 서버에서 일부 작업을 수행하는, 즉 사용자의 세부 사항을 저장하는 것은 꽤 일반적인 행동입니다. 양식을 제출하는 사용자가 자신이 주장하는 사용자임을 어떻게 알 수 있습니까? 대부분의 경우 쿠키 또는 Windows 기반 인증을 사용합니다.

공격자가 숨겨진 IFRAME에서 정확히 같은 양식을 제출하는 사이트로 유인 할 경우 어떻게됩니까? 쿠키는 그대로 제출되며 서버는 합법적 인 요청과 다른 요청을 보지 않습니다. (gmail이 발견 한 것처럼)

위조 방지 토큰은 페이지가 생성 될 때마다 추가 쿠키 토큰을 생성하여 이러한 공격을 방지합니다. 토큰은 양식과 쿠키에 모두 포함됩니다. 양식과 쿠키가 일치하지 않으면 CSRF 공격을받습니다 (공격자가 위에서 설명한 공격을 사용하여 위조 방지 토큰을 읽을 수 없으므로).

소금 그냥 임의의 문자열입니다 : 그리고 무엇을 소금

위의 기사에서 수행. 다른 소금 값은 다른 위조 토큰이 생성된다는 것을 의미합니다. 즉, 공격자가 유효한 토큰을 어떻게 든 보유 할지라도 다른 소금 값이 필요한 응용 프로그램의 다른 부분에서이를 다시 사용할 수 없습니다.

업데이트 : 토큰은 어떻게 생성됩니까? source을 다운로드하고 AntiForgeryDataSerializer, AntiForgeryData 클래스를 살펴보십시오.

+0

사실 나는이 모든 것을 알고 있습니다, 제 문제를 보았습니까? 나는 지금 막 블로그에서 왔습니다. – MemoryLeak

+0

"세션 고정"문제 또는 "소금"문제? "세션 고정"익숙하지 않습니다. 사이트를 스캔 할 때 무엇을 사용하고 있습니까? – russau

+0

감사합니다, russau,하지만 난 그냥 블로그 게시물에 동의하지 않는다, 그럼 여기에 질문을 .... – MemoryLeak

1

당신은 몇 가지 관련이없는 문제를 요청했습니다 : 보안 소프트웨어가 '고정 세션'을보고 왜

  1. 모르겠어요.
  2. 이 사용

(아마도) 각 요청이 유효한지 확인하기 : 보고서

  • 안티 위조 토큰이 함께 제공되는 설명서를 읽어보십시오. 따라서 토큰이 전달되지 않으면 다른 사람이 페이지 ?x=1에 대한 링크를 표시하려고 시도하면 요청이 거부됩니다. 또한 동일한 항목의 중복 게시를 방지 할 수 있습니다. "라고

    Session["nextToken"] = token; 
    WriteToken(token); 
    
    ... 
    
    if(!Request["nextToken"] == Session["nextToken"]){ 
        ... 
    } 
    
    // note: order in code is slightly different, you must take the token 
    // before regenerating it, obviously 
    

    내가 이것에 대한 용어 (이 보호하는 공격을) 생각 : 클릭하면 '후'두 번, 토큰 가능성 (각 요청)를 변경하며,이 경우는 같은 것을 통해 감지 CSRF "(교차 사이트 요청 위조), 요즘. 여기 AntiForgeryToken에 대한 정보의

  • +0

    토큰이 SessionID와 관련이 있다고 말한 이유는 무엇입니까? – MemoryLeak

    +0

    MemoryLeak : 저는 ASP.NET MVC를 특별히 사용하지 않았습니다. 요청 토큰의 목적에 대해 일반적으로 대답했습니다. 바라건대 누군가가 당신을 위해 그걸 정리할 수 있기를 바랍니다. –

    +0

    당신이 옳다면, "소금"은 무엇을 위해 사용됩니까? – MemoryLeak