2017-02-05 25 views
6

Phiên bản mới hơn của Laravel (đúng) sử dụng POST để đăng xuất một phiên. Lý do cho việc này là GET/HEAD chỉ nên được sử dụng cho các hành động thụ động để tuân thủ HTTP.Cách đăng xuất khỏi phiên hết hạn trong Laravel 5.x?

đăng với một CSRF token cũng bảo vệ độc hại sử dụng/trang web từ đăng nhập bạn ra khỏi các phiên của bạn: https://security.stackexchange.com/questions/62769/must-login-and-logout-action-have-csrf-protection

Tuy nhiên nếu phiên đã hết thời gian, và người dùng nhấp logout (mà gây nên một POST đến tuyến đăng xuất) nhận được lỗi không khớp mã thông báo. Điều đó có ý nghĩa - mã thông báo không khớp, bởi vì phiên đã hết hạn.

Tôi chỉ có thể nắm bắt được TokenMismatchException cụ thể dựa trên các biến yêu cầu, và nếu có, tiếp tục chúng theo cách vui vẻ của chúng (đến đường dẫn chuyển hướng đã đăng xuất, nói "home" hoặc "/"). Như thế này:

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

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

Câu hỏi của tôi là: nếu tôi làm các việc trên, là những gì các điểm token ở nơi đầu tiên? Và cách bạn đăng xuất người dùng khi phiên của họ hết hạn trong khi vẫn duy trì kết quả dự định khi sử dụng đăng xuất POST bằng mã thông báo CSRF?

+0

Trong trường hợp cần thiết bảo vệ đăng xuất: http://security.stackexchange.com/questions/62769/must-login-and-logout-action-have-csrf-protection/62797 Để trả lời câu hỏi của bạn, vui lòng cung cấp cho tôi thông tin, loại mechanizm là timeouting phiên của bạn? – Mkay1

+0

@ Mkay1 giả định bất kỳ loại thời gian chờ nào (thời gian chờ phiên, phiên bị hủy, v.v.). Liên kết bạn cung cấp được liên kết giống nhau trong câu hỏi của tôi – Chris

Trả lời

3

Phần mềm trung gian kiểm tra xác thực sẽ chạy trước phần mềm trung gian kiểm tra tính hợp lệ của mã thông báo CSRF.

Bằng cách đó, khi phiên hết hạn, bạn chưa bao giờ nhận được kiểm tra CSRF ngay từ đầu vì bạn đã kiểm tra hết hạn phiên trong phần mềm trung gian xác thực và thực hiện chuyển hướng đến trang đăng nhập ở đó.

Điều này sẽ không ảnh hưởng đến việc bảo vệ CSRF hợp lệ phiên đăng xuất, vì phiên hợp lệ sẽ thực hiện phiên thông qua phần mềm trung gian xác thực.

Theo mặc định, phần mềm trung gian của Laravel chạy kiểm tra CSRF trước tiên. Tuy nhiên, sẽ dễ dàng sắp xếp lại chúng để hoạt động theo cách khác.

+0

Điều đó tạo ra nhiều ý nghĩa thực sự. Tôi đang sử dụng các tuyến mặc định cho auth, và tất cả ngồi bên ngoài (theo mặc định) của phần mềm trung gian auth, nhưng hãy ngồi trong middleware web. Tôi sẽ cung cấp cho họ một shuffle xung quanh bây giờ, và quay trở lại với câu trả lời của bạn nếu quyền của bạn. Tò mò mặc dù tại sao hành vi mặc định là cho các tuyến đường đăng xuất được bên ngoài của middleware auth – Chris

+0

Nó không phải là hành vi mặc định là cho các tuyến đường đăng xuất được bên ngoài middleware auth. Đó là phần mềm trung gian auth cho các tuyến xác thực được đặt trong constructor của bộ điều khiển xác thực theo mặc định, do đó nó chạy sau danh sách phần mềm trung gian thông thường. –

+0

Ah yeah, tôi không bao giờ đổi chỗ với phần mềm trung gian cấp điều khiển, vì vậy hãy quên rằng chúng tồn tại tbh. Tôi chỉ sử dụng cấp trung gian hoặc cấp trung gian của nhà cung cấp tuyến đường. Cảm thấy phù hợp hơn và có thể nhìn thấy đối với tôi. – Chris

Các vấn đề liên quan