문제

ASP.NET MVC 1.0에는 크로스 사이트 요청 위조 보안 문제를 처리하는 새로운 기능이 있습니다.

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

새로운 양식이 렌더링 될 때마다 HTML 양식으로 생성 된 토큰이 계속 변경되었습니다.

이 토큰이 어떻게 생성되는지 알고 싶습니까? 일부 소프트웨어를 사용 하여이 사이트를 스캔하면 다른 보안 문제인 세션이 고정됩니다. 왜요? 토큰이 계속 변경 되었으므로이 문제는 어떻게 올 수 있습니까?

그리고 또 다른 기능, 즉 "소금"이 있습니다. antiForgeryToken, 그러나 나는 우리가 "소금"을 사용하여 토큰을 생성하지 않더라도 토큰이 항상 변할 것이므로 왜 그러한 기능이 있는가?

도움이 되었습니까?

해결책

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

이는 CSRF (Cross-Site Request Prostery)를 방지하기위한 것입니다. Sumbit 양식을 '저장'하고 서버에서 일부 조치를 수행하는 것은 꽤 표준적인 동작입니다. 즉, 사용자의 세부 정보를 저장합니다. 양식을 제출하는 사용자가 사용자가 주장하는 사용자인지 어떻게 알 수 있습니까? 대부분의 경우 쿠키 또는 Windows 기반 인증을 사용합니다.

공격자가 당신을 약간 숨겨진 iframe에 정확히 같은 형태를 제출하는 사이트로 유혹한다면 어떨까요? 쿠키는 그대로 제출되며 서버는 요청을 합법적 인 요청과 다른 것으로 보지 않습니다. (Gmail이 발견 한대로 : http://www.gnucitizen.org/blog/google-gmail-e-mail-hijack-technique/)

방지 토큰은 페이지가 생성 될 때마다 추가 쿠키 토큰을 만들어 이러한 형태의 공격을 방지합니다. 토큰은 양식과 쿠키 모두에 있습니다. 양식과 쿠키가 일치하지 않으면 CSRF 공격이 있습니다 (공격자가 위에서 설명한 공격을 사용하여 황지대 토큰을 읽을 수 없기 때문에).

위의 기사에서 소금은 무엇을합니까 :

소금은 단지 임의의 끈입니다. 다른 소금 값은 다른 방지 토큰이 생성 될 것임을 의미합니다. 이는 공격자가 어떻게 유효한 토큰을 유지하더라도 다른 소금 값이 필요한 응용 프로그램의 다른 부분에서 재사용 할 수 없음을 의미합니다.

업데이트: 토큰은 어떻게 생성됩니까? 다운로드 원천, antiforgeryDataserializer, antiforgeryData 클래스를 살펴보십시오.

다른 팁

당신은 몇 가지 관련이없는 문제를 묻습니다.

  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"(크로스 사이트 요청 위조)라고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top