2014-10-29 3 views

답변

22

짧은 버전은 생성 된 토큰이 (a) 쿠키 (b) 숨겨진 양식 값입니다. 양식을 제출하면이 2 개의 값을 서로 비교하여 유효한지 확인합니다. 더 읽기 :

http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-(csrf)-attacks http://www.codeproject.com/Articles/793384/ASP-NET-Anti-Forgery-Tokens-internals

+2

실제로 두 개의 토큰이 생성됩니다. 두 곳에서 저장되는 것만이 아닙니다. –

5

(https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks에서) 허용 대답 이럴보다 더 분명하다 단계적 설명

  1. 클라이언트는 양식이 포함 된 HTML 페이지를 요청합니다.
  2. 서버에는 응답에 두 개의 토큰이 있습니다. 하나의 토큰이 쿠키로 보내집니다. 다른 하나는 숨겨진 양식 필드에 배치됩니다. 토큰은 임의로 생성되어 적들이 값을 추측 할 수 없도록합니다.
  3. 클라이언트가 양식을 제출하면 두 토큰을 다시 서버로 보내야합니다. 클라이언트는 쿠키 토큰을 쿠키로 보내고 양식 데이터 내에 양식 토큰을 보냅니다. 브라우저 클라이언트는 사용자가 양식을 제출할 때 자동으로이를 수행합니다.
  4. 요청에 두 토큰이 모두 포함되어 있지 않으면 서버가 요청을 허용하지 않습니다.
0

위의 설명은 AjaxRequest의 경우 위조 방지 프로그램, 특히 get 요청에서 숨겨진 값이있는 양식을 보내지 않고 대신 헤더 값을 설정해야합니다 자바 스크립트를 통해 쿠키의 내용과 동일한 내용으로 설정해야합니다. 설정해야하는 헤더 이름은 기본적으로 X-XRF-Token 헤더 [angularjs와 관련이 있습니다] ... 물론 CORS를 사용 중지하거나 특정 도메인에서만 사용하도록 설정해야합니다 API를 보호하려면 클릭 재발을 피하기 위해 SAMEORIGIN도 설정해야합니다.

관련 문제