2017-02-05 3 views
6

최신 버전의 Laravel (올바르게)이 POST를 사용하여 세션을 로그 아웃합니다. 이것에 대한 이유는 GET/HEAD는 수동 동작이 HTTP를 준수하는 경우에만 사용해야한다는 것입니다. 게시물을 유발하는 (그러나 https://security.stackexchange.com/questions/62769/must-login-and-logout-action-have-csrf-protectionLaravel 5.x에서 만료 된 세션에서 로그 아웃하는 방법은 무엇입니까?

세션이 이미 제한 시간을 초과 한 경우, 사용자는 로그 아웃을 클릭하십시오 CSRF 토큰

게시 또한 세션에서 로그 아웃 악의적 인 사용자/사이트를 보호 로그 아웃 경로에) 토큰 불일치 오류가 수신되었습니다. 세션이 만료되었으므로 토큰이 일치하지 않습니다.

요청 변수에 따라 특정 TokenMismatchException을 잡을 수 있습니다. 로그 아웃 된 리디렉션 경로 (예 : "home"또는 "/")로 계속 메리 방식으로 계속 수행 할 수 있습니다. 이처럼 :

public function render($request, Exception $e) 
{ 
    if ($e instanceof TokenMismatchException && $request->getRequestUri() === '/logout') { 
     return redirect('/'); 
    } 

    return parent::render($request, $e); 
} 

내 질문은 : 나는 위를 할 경우, 첫번째 장소에있는 토큰의 포인트는 무엇인가? CSRF 토큰과 함께 POST 로그 아웃을 사용하여 의도 한 결과를 유지하면서 세션이 만료되었을 때 사용자를 로그 아웃하는 방법은 무엇입니까?

+0

로그 아웃을 보호해야하는 경우 : http://security.stackexchange.com/questions/62769/must-login-and-logout-action-have-csrf-protection/62797 질문에 대답하려면 나에게 정보를 알려줘, 어떤 종류의 기계 장치가 당신의 세션을 타임 아웃하고 있습니까? – Mkay1

+0

@ Mkay1은 어떤 종류의 타임 아웃 (세션 타임 아웃, 세션 파괴 등)을 가정합니다. 당신이 제공 한 링크는 내 질문에 연결된 동일한 것입니다. – Chris

답변

3

인증을 확인하는 미들웨어는 CSRF 토큰의 유효성을 검사하는 미들웨어보다 먼저 실행해야합니다.

그런 식으로 세션이 만료되면 이미 인증 미들웨어에서 세션 만료를 확인하고 거기에 로그인 페이지로 리다이렉트했기 때문에 처음에는 CSRF 검사를받지 못합니다.

유효한 세션의 CSRF 보호에 영향을 미치지 않습니다. 유효한 세션이 인증 미들웨어를 통해 이루어지기 때문입니다.

기본적으로 Laravel 미들웨어는 CSRF 검사를 먼저 실행합니다. 그러나 다른 방식으로 작동하도록 재정렬하는 것이 쉬워야합니다.

+0

실제로 많은 의미가 있습니다. auth에 대한 기본 경로를 사용 중이며 모두 인증 미들웨어 외부에 (기본적으로) 앉아 있지만 미들웨어에 앉아 있어야합니다. 나는 그들에게 지금 주변에 셔플을 줄 것이고, 당신의 대답이라면 당신의 대답으로 돌아올 것입니다. 기본 동작이 로그 아웃 경로가 인증 미들웨어 외부에있는 이유는 궁금합니다. – Chris

+0

기본 동작은 로그 아웃 경로가 인증 미들웨어 외부에있는 것이 아닙니다. 인증 경로에 대한 인증 미들웨어는 기본적으로 인증 컨트롤러의 생성자에서 설정되므로 일반 미들웨어 목록에서 실행됩니다. –

+0

아, 그래, 난 컨트롤러 수준의 미들웨어로 바꾼 적이 없어, 그래서 그들은 tbh 존재 잊어 버려. 나는 단지 라우트 레벨이나 라우트 프로 바이더 레벨 미들웨어를 사용한다. 내게 일관되고 눈에 띄는 느낌. – Chris

관련 문제