希望要求对路由子集进行"最新"身份验证,以防止滥用老板PC



我有一个应用程序,专为人们设计保持身份验证(记住我功能((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 分钟内登录才能批准费用报告。请重新登录:' 警报div 到仅在这种情况下显示的登录视图模板 在敏感任务的控制器方法中,检查经过身份验证的用户users.last_login,如果不到 X 分钟前,则注销用户并将其重定向到当前页面,这会将他们带回显示"您必须在过去 5 分钟内登录......"的登录页面。消息(。

有没有人在其他方面有任何经验来平衡某些功能/信息的安全性与记住我登录的便利性?

出于另一个原因,我做了类似的事情,可能对你的要求有用。在标题中,我添加了一个元标记"uid",user_id加密。

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

使用javascript,我每5分钟"ping"一次服务器。

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 作业(并在服务器级别注销它们。

最新更新