2014-10-15 6 views
0

도메인 이름이 "example.com"과 "demo.com"인 두 대의 서버가 있습니다. 나는 모든 프로젝트를 "demo.com"에서했다. 하지만 "example.com"홈 페이지에서도 "demo.com"의 가입 페이지를 원합니다. 여기서 POST 데이터 이후에 사용자가 정보를 잘못 입력했는지 여부에 관계없이 "demo.com"서버로 리디렉션됩니다.허용 된 웹 사이트 목록에 대해 csrf 토큰을 설정하는 방법

나는 csrf 오류가 있습니다. 내가 면제 csrf 토큰을 줬을 때. 그것은 잘 작동했는데, 나는 그다지 원하지 않습니다. csrf 면제를 사용하지 않고 누군가가 나를 도울 수 있습니까? 또는

+0

그건 ... CSRF가 작동하는 방식이 아닙니다. –

답변

0

불가능하고 @Daniel로하지 먹으 렴 의견에 언급 된 그 두 서버 즉, "example.com"와 "demo.com"(허용 된 호스트 목록)에 대한 CSRF 면제

(내 영어 죄송합니다) 어떻게 작동하는지. CSRF 토큰은 매번 사용자가 페이지를 방문 할 때마다 서버에 의해 생성됩니다. 그리고 매번 달라집니다. 사용자가 양식을 제출하면 서버는 양식이 동일한 지 또는 다른지를 검증합니다.

CSRF 보호가 처음부터 존재하는 이유를 이해해야합니다. 예를 들어 stackoverflow.com/avi/delete의 POST 요청이 SO에서 내 프로필을 삭제한다고 가정합니다. 이제

나는 악의적 인 사이트를 방문 할 경우 내 이름과 이메일을 요청 무고한 찾고 형태를 가질 수있다 : 같은에서, 또한 내가 SO 로그인하고 내 세션이 유효하고 경우

<form action="http://stackoverflow.com/avi/delete" method="post"> 
    Your name: <input type="text"><br> 
    Your email: <input type="text"><br> 
    <input type="submit"> 
</form> 

악의적 인 사이트에서 위의 항목을 제출하면 내 계정이 삭제됩니다! 브라우저가 SO 관련 쿠키를 보내고 SO 서버가 쿠키를 식별 할 수 있기 때문입니다. 그러나 SO의 선량한 사람들은 영리합니다. 계정 삭제 양식이있는 SO의 페이지에는 CSRF 토큰도 포함됩니다. 그리고이 토큰은 사용자가 페이지를 방문 할 때마다 매번 생성됩니다. 서버가 유효성을 검사하면 계정이 삭제되고 계정이 삭제되면 단순히 요청을 무시합니다.

이제 악성 사이트는 SO가 생성 한 CSRF 토큰을 알 수 없습니다. 따라서 양식을 제출하더라도 내 계정은 여전히 ​​안전합니다.

본질적으로 원하는 것은 서버 A에서 토큰을 생성하고 서버 B에서 유효성을 검사하려는 것입니다. 이제 수는 일 때마다 실제로 동일한 토큰을 사용하므로 서버 B는이를 검증 할 수 있습니다. 그러나 그것은 CSRF 토큰의 모든 목적을 이깁니다.