我有一个相当大的网络应用程序,它目前没有加密它存储的任何数据(密码和一些令牌除外)在mysql数据库中。在数据库中存储和检索的项目很多。我想知道是否有某种方法可以自动加密存储到数据库的所有内容,然后在从数据库中检索到任何内容时自动解密。我现在最好的选择是把它放在我的routes.php文件中:
View::composer('Crypt', function($view){
$view->with('Crypt', Crypt::class);
});
然后手动更改Web应用程序每次在每个Controller,Model和View中调用数据库时,如更改:
$user->email = Input::get('email');
到
$user->email = Crypt::encode(Input::get('email));
然后每次我检索数据库值(这很多)时都会这样做:
{{Crypt::decode($user->email)}}
我觉得必须有一种更简单的方法来做到这一点,而不是手动1000次,但我不确定如何。
答案 0 :(得分:2)
为避免每次调用数据库时都必须重复使用encrypt()
和decrypt()
方法,您可以改为使用Eloquents Accessors & Mutators。
要定义访问者,请在模型上创建getFooAttribute方法 Foo是"骆驼"您希望访问的列的名称。 在此示例中,我们将为first_name定义一个访问者 属性。当Eloquent时,访问者将自动调用 试图检索first_name的值:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Decrypt the user's first name.
*
* @param string $value
* @return string
*/
public function getFirstNameAttribute($value)
{
return Crypt::decode($value);
}
}
要定义mutator,请在模型上定义setFooAttribute方法 Foo是&#34;骆驼&#34;您希望访问的列的名称。 因此,再次,让我们为first_name属性定义一个mutator。这个 当我们尝试设置值时,将自动调用mutator 模型的first_name属性:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* Encrypt the user's first name.
*
* @param string $value
* @return string
*/
public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = Crypt::encode($value);
}
}
答案 1 :(得分:0)