Laravel 保护路由免受其他系统请求

Posted

技术标签:

【中文标题】Laravel 保护路由免受其他系统请求【英文标题】:Laravel Protecting Routes from other System Request 【发布时间】:2022-01-09 06:59:41 【问题描述】:

我们拥有这个系统,我们的学生可以通过该系统访问我们提供的其他平台,例如带有学生许可的 Office 365 和其他程序...

我们有权创建此访问链接、创建路线并添加他们提供的一些可用标签,例如学生电子邮件、学生唯一代码、学生手机......

这个链接作为我们 Laravel 6.0 应用程序的桥梁,该链接应该将学生发送到一个内部页面,他们可以创建他们的 office 365 帐户(如果他们还没有)并重新定义他们的密码,但问题是,我不能保证这个登录的用户不会手动(从开发检查员)更改从路由参数传递的数据,也不会访问其他学生数据并更改他们的 Office 密码。

关键是,我可以控制这个页面只能从这个以前的 URL(这个学生登录的系统)访问,并且它可以工作,但是我不能从我的应用程序中做一个中间件来检查用户是否是登录其他应用程序,我们没有任何 API 来检查来自该系统的身份验证..

有什么方法可以保护我们的路线不受其他系统的影响?

从其他系统接收此参数并验证先前 URL 的控制器方法:

    public function index($ra, $email)
    
    if(url()->previous() != "https://other.system/" )
        return view('errors.503');
    
    
    $usuario = UsuariosMicrosoft::where('login', '=', $ra)->get();
    
    return view('portaloffice.pagina', compact('ra', 'email', 'usuario'));


这是我的路线:

Route::get('office365/ra/email', 'PortalOffice\PortalOfficeController@index')->name('portaloffice.usuario');

【问题讨论】:

【参考方案1】:

通过对 URL 保密来保护事物通常是一个非常糟糕的主意。它们很容易被嗅探或猜到。

项目通常防止未经授权的访问的方式是使用Auth 保护,并在您尝试保护的模型和User 模型之间建立关系。

在设置模型、关系和守卫后,您最终会在控制器中得到类似这样的内容:

$user = Auth::user();
$user->UsuariosMicrosoft->get()
return $user;

【讨论】:

以上是关于Laravel 保护路由免受其他系统请求的主要内容,如果未能解决你的问题,请参考以下文章

保护 show() 方法免受用户访问其他用户消息的最佳方法

保护ASP.NET 应用免受 CSRF 攻击

保护 iframe 免受其他人的侵害并为 iframe 使用一个域?

Laravel CSRF 保护

Laravel 保护列免受不可为空/默认值的批量分配

如何保护 Android 代码免受逆向工程? [复制]