2012-03-30 3 views
6

메커니즘에 대한 이해를 django에 적어 두었습니다. 문제가 있다면 제게 알려주십시오.django의 csrf와 CSRFCookie의 숨겨진 필드

csrfViewMiddleware는 host.Since에서이 필드의 값에 대해 알 수 없습니다이 양식을 흉내 낸 악의적 인 웹 사이트를 원래 형태의 'csrfmiddlewaretoken'숨겨진 필드에 고유 한 문자열 저장을 만들고, 그것을 사용할 수 없습니다.

누군가가 양식을 게시하려고 시도하면 웹 사이트에서 'csrfmiddlewaretoken'필드와 그 값을 확인합니다. 잘못되었거나 설정되지 않은 경우 csrf 시도가 감지됩니다.

그렇다면 정확히 CSRFCookie은 무엇입니까? The docCSRFCookiehidden field에 고유 값이 설정되어 있다고 말합니다.이 부분이 혼란 스럽습니다. 고유 한 문자열이 포함 된 브라우저로 쿠키가 전송됩니까?

장고는 인증 된 사용자 쿠키에 저장되어있는 CSRF 토큰을 할당합니다

답변

5

좋아, 그래서 여기 내 설명을갑니다, 감사합니다. 이 쿠키의 값은 악의적 인 제 3자가 아닌 사용자가 요청하는 것을 확인하기 위해 사용자가 "안전하지 않은"(즉, POST, PUT, DELETE) 요청을 할 때마다 읽혀집니다.

양식에 넣는 CSRF 태그는 실제로 쿠키의 CSRF 토큰을 가져온 다음 양식을 제출할 때 POST 변수로 전달합니다.

잘하면 그게 좀 더 명확하게.

+0

그래서 인증 된 사용자의 브라우저에서만이 토큰을 받지만 사이트를 방문하는 모든 사람이 아닙니다. 맞습니까? – damon

+0

Django가 정확하게 처리하는 방법을 모르는 경우 - 인증 상태에 관계없이 모든 사용자를 보호 할 수 있습니다. 기본적으로 앱의 일부 기능을 변경할 수있는 모든 작업에는 CSRF 보호 기능이 있어야합니다. – Todd

1

현재의 이해를 통해 나는 검증 된 답변에 완전히 만족하지 않습니다.

내 버전 here을 찾을 수 있습니다.

요약하면 CSRFCookie는 동일한 출처 정책으로 인해 공격자가 액세스 할 수 없다는 점에서 "안전"합니다. 브라우저는이 값을 자동으로 전송합니다. 이제 양식에서이 값을 보내야합니다 (예 : 숨겨진 필드). 이것은 양식이이 값을 알아야하며 쿠키에서 가져올 수 있음을 의미합니다.

공격자가 쿠키에서 토큰을 가져올 수 없으므로 토큰이 포함 된 악성 코드를 위조 할 수 없습니다.

중요한 것은 결국 사용자가 csrf 토큰을 보낼 수 있고 서버가이를 확인할 수 있다는 것입니다. 쿠키를 사용하는 것이 편리한 방법이지만, 이는 다르게 구현 될 수 있습니다 (예 : 서버가 각 세션에 대해 CSRF 토큰을 저장할 수 있음).

저는 전문가는 아니지만, 이해합니다. 희망이 도움이됩니다.