2013-05-15 2 views
1

나는 뭔가를 놓치고 있다는 것을 알고 있습니다. 다음 상황을 고려하십시오. 나는 goodbank.com이라는 웹 사이트를 운영합니다. URL http://goodbank.com/transfer/은 GET에서 다른 페이지로 돈을 이체하는 양식과 함께 HTML 페이지를 제공합니다. 이 양식에는 CSRF 공격을 막기위한 임의의 토큰이 있습니다. 서버에서 토큰의 유효성이 POST에서 확인되고 해당 컨트롤러가 인증 된 세션 만 허용합니다.CSRF 토큰이 악의적 인 GET과 다른 탭에서 POST로 이어지는 것을 어떻게 보호합니까?

브라우저에서 goodbank.com/에 로그인한다고 가정 해 보겠습니다. 다른 탭에서는 robgoodbank.com으로 이동합니다. 검색 페이지의 일부로 유효한 양식을 얻기 위해 goodbank.com/transfer/에 AJAX 요청을 수행하는 자바 스크립트가 있습니다. 그런 다음 양식의 다른 필드를 채우고 POST를 수행합니다. 내 계정이 밖으로 청소 :(

어떻게 기존 않습니다 보호 체계는 이러한 공격으로부터 보호?

사전에 감사합니다. 서버가 Cross Origin Resource Sharing을 허용하지 않는

답변

1

, 브라우저가 XMLHttpRequest을 거부합니다. 당으로 링크를 사용하는 경우 XMLHttpRequest은 요청이 발생한 도메인이 포함 된 Origin 헤더를 전송합니다. 서버가 해당 도메인의 와일드 카드가 포함 된 Access-Control-Allow-Origin으로 응답하지 않으면 브라우저가 요청을 거부합니다. 실제로 액세스를 제어하는 ​​데 사용되는 많은 수의 Access-Control- 헤더가 있습니다 알로에 이 존재하고 Referer HTTP의 당신의 예에서 "http://robgoodbank.com을"입니다 헤더, 당신은 또한 요청을 거부 할 수있는 경우 추가 보호를 위해 등

wable 방법은, 서버는 Origin을 확인해야합니다.

이것들은 절대 안전한 것은 아니지만 추가 보호 층을 제공해야합니다. Referer를 스푸핑하는 메커니즘 (예 : 확장)이 있지만 브라우저가 어떤 방식 으로든 손상되지 않은 경우 사용자가 고용했을 것입니다. 브라우저가 손상된 경우 문제가 많이 발생합니다 ...

+0

여기에 중요한 수정 사항은 참조 자 및 원점 확인입니다. 그것들이 없으면 숨겨진 iframe에서 GET 요청을 수행하여 후속 POST 요청에서 사용할 수있는 모든 종류의 anti-csrf 토큰을 추출하기가 쉽습니다. –