Laravel 在不破坏身份验证的情况下加密用户电子邮件

Posted

技术标签:

【中文标题】Laravel 在不破坏身份验证的情况下加密用户电子邮件【英文标题】:Laravel encrypt user email without breaking authentication 【发布时间】:2015-04-27 15:07:46 【问题描述】:

我想在数据库中加密电子邮件地址。使用 mutators 我可以为我的 laravel web-app 加密和解密模型属性。

问题在于电子邮件属性用于身份验证。因此,对电子邮件使用 mutators 似乎完全破坏了我的应用程序,大概是通过 Auth::check()、id()、login() 等。

我曾考虑编写自定义身份验证驱动程序,但无法正常工作。

我只是想知道在哪里重载模型以在 set 上添加加密并在 get 上解密,这将与 laravel 身份验证方法兼容。

【问题讨论】:

问题是 Laravel 使用简单的 SQL 来查找用户。要执行您想要的操作,您必须获取所有用户解密电子邮件地址,然后通过电子邮件搜索用户。我不认为这可以通过覆盖一个方法来完成...... 你不能做一个加密的电子邮件检查。因此,从用户(他们的电子邮件)那里获取输入。使用与存储在数据库中的方法相同的方法加密他们的电子邮件。然后将这些与身份验证值进行比较? @ChrisTownsend 这将是快速破解,但我想知道是否可以在尊重 laravel 现有身份验证方法的同时完成。 我想知道您是否可以扩展身份验证类,方法是添加到此 laravel.com/docs/4.2/extending#authentication 并将您自己的添加到界面中 是的,已经试过了,可悲的是根本无法让它工作 【参考方案1】:

除了加密之外,您还需要在自定义 Auth 提供程序中实现某种 blind indexing。

有很多方法可以搞砸这样的实现。请务必参考 CipherSweet 文档(尤其是其 security design 和 internals),以确保您的实现正确无误。

或者,您可以只使用 CipherSweet 为您的自定义 Auth 提供程序提供支持,而不必自己担心加密实施。

【讨论】:

以上是关于Laravel 在不破坏身份验证的情况下加密用户电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 - 手动登录没有密码的用户

如何在不关闭当前 Firebase 会话的情况下创建用户身份验证 [重复]

Laravel sanctum 检查用户是不是在没有重定向的情况下通过身份验证

如何在不经过注册用户身份验证的情况下保护公共API请求

ASP NET API - 在不打开 Microsoft 登录页面的情况下使用 Azure AD SAML 协议对用户进行身份验证

如何在不将密码保存在数据库中的情况下验证用户身份