【发布时间】:2018-05-07 05:12:09
【问题描述】:
我有一个使用 Laravel 5.23 编写的应用程序。在其中,我使用以下方法对某些敏感的用户数据进行加密,然后再将其存储在表中:
'Crypt' => Illuminate\Support\Facades\Crypt::class,
该字段的迁移是:
$table->string('field_account_name')->nullable();
我在课堂上设置了修改器来执行此操作:
public function getFieldAccountNameClearAttribute($value)
{
if ($this->field_account_name) {
try {
return Crypt::decrypt($this->field_account_name);
} catch (DecryptException $e) {
return 'INVALID';
}
} else {
return $this->field_account_name;
}
}
和
public function setFieldAccountNameClearAttribute($value)
{
$this->attributes['field_account_name'] = Crypt::encrypt($value);
}
这已经完美运行了很长时间,但是一个用户在一周前放弃了他们的魔法并触发了:
Exception 'ErrorException' with message 'The payload is invalid
我已经设法通过在字段中放置特殊字符(例如')作为带有空格的长字符串的一部分来复制该问题。
日期已加密并存储,但检索时失败。
为了避免这种情况,我应该从前端的加密中排除哪些字符?我找不到这个问题的答案。
或者该字段应该是text 而不是字符串?
【问题讨论】:
-
你应该使用
text而不是varchar
标签: php encryption laravel-5.2