Хотите требовать «недавней» аутентификации для подмножества маршрутов, чтобы предотвратить неправильное использование боссов ПК - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть приложение, которое предназначено для того, чтобы люди оставались аутентифицированными (запомните меня по функциональности) (https://laravel.com/docs/master/authentication#remembering-users),, чтобы они могли повторно открыть браузер, чтобы быстро искать вещи без необходимости каждый раз входить в систему.

Некоторые части приложения позволяют людям просматривать более конфиденциальную информацию или авторизовать запросы.

Я хочу запретить людям открывать браузер на компьютере босса, когда их босс отсутствует в комнате, и получать доступ к нему.эта конфиденциальная информация.

Чтобы быть эффективными, мне нужно остановить кеширование паролей браузерами - я уже работал над этой проблемой и преодолел ее, поместив в html ложное поле пароля вне поля просмотра ранее.

Я планирую добавить событие - как это было бы в Laravel 4:

Event::listen('auth.login', function($user)
{
    $user->last_login = new DateTime;

    $user->save();
});

, хотя это немного сложнее в Laravel 5, но все еще выполнимо.

Затем я:

добавлю 'Вы должны войти в систему в течение последних 5 минут, чтобы утвердить претензии по расходам. Пожалуйста, войдите снова:' alert div to the loшаблон представления джина, который в данном случае отображается только в методах контроллера для задач, которые являются чувствительными, проверьте пользователя.last_login прошедшего проверку подлинности и, если не более X минут назад, выйдите из системы и перенаправьте его на текущую страницу, на которую он попадетвернуться на страницу входа в систему с сообщением «Вы должны войти в систему в течение последних 5 минут ...»).

Есть ли у кого-нибудь опыт других способов сбалансировать безопасность некоторых функций / информации с удобствомЗапомнить меня Войти?

1 Ответ

0 голосов
/ 26 сентября 2018

Я сделал что-то похожее по другой причине, которая может быть полезна для вашего запроса.В заголовке я добавил метатег 'uid' с зашифрованным user_id.

<meta name="ui" content="{{ encrypt(Auth::id()) }}"/>

С помощью javascript я пингую сервер каждые 5 минут.

function ping() {
  const token = $('meta[name="csrf-token"]').attr('content');
  const ui = $('meta[name="ui"]').attr('content');
  $.ajax({
    type: 'post',
    url: '/ajax/ping',
    data: {'ui': ui},
    headers: {'X-CSRF-TOKEN': token},
    dataType: 'json'
  });
}

setInterval(function () {
  ping()
}, 300000);

На сервере я расшифровываю user_id и регистрирую событие в users.last_activity.Это решение не основано на cookie.Он покажет вам, кто в сети, или, по крайней мере, был в течение последних 5 минут.Если они выйдут из системы / войдут в систему, вы узнаете это сразу.Если они оставляют браузер открытым и выполняют другие действия, они остаются в сети.Если это более 5 минут, вы можете создать запланированное событие (задание cron) и выйти из него на уровне сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...