2017-02-05 3 views
6

Более поздние версии Laravel (правильно) используют POST для выхода из сеанса. Причиной этого является то, что GET/HEAD следует использовать только для того, чтобы пассивные действия соответствовали требованиям HTTP.Как выйти из истекшего сеанса в Laravel 5.x?

POSTING с маркером CS также защищает вредоносные пользователь/сайты от входа вас из ваших сессий: https://security.stackexchange.com/questions/62769/must-login-and-logout-action-have-csrf-protection

Однако если сеанс уже истек, и пользователь нажимает кнопку выхода из системы (который запускает POST к маршруту выхода) получена ошибка несоответствия токенов. Это имеет смысл - токен не соответствует, потому что сеанс истек.

Я могу просто поймать это конкретное TokenMismatchException на основе переменных запроса, и если да, продолжайте их по-своему (до выведенного пути перенаправления, например «home» или «/»). Как это:

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

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

Мой вопрос: если я выше, чем смысл лексемы в первую очередь? И как вы выходите из системы, когда срок их сессии истек, сохраняя при этом ожидаемые результаты использования выхода POST с токеном CSRF?

+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, и все они сидят вне (по умолчанию) промежуточного программного обеспечения auth, но сидят внутри промежуточного программного обеспечения. Я дам им перетасовать сейчас и вернусь с ответом, если ты прав. Любопытно, однако, почему поведение по умолчанию для маршрута выхода из системы не является промежуточным программным обеспечением auth – Chris

+0

Дело не в том, что поведение по умолчанию для маршрута выхода вне внешнего промежуточного ПО. Это связано с тем, что по умолчанию в конструкторе контроллера аутентификации задано промежуточное ПО аутентификации для маршрутов аутентификации, поэтому оно запускается после обычного списка промежуточного программного обеспечения. –

+0

Ах да, я никогда не переводил на промежуточное ПО уровня контроллера, поэтому забывайте, что они существуют tbh. Я использую только промежуточное ПО уровня маршрута или уровня маршрута. Чувствует себя более последовательным и видимым для меня. – Chris

Смежные вопросы