我有 Laravel 5.2 的应用程序。我有一些路线。现在我想让几条路线安全,这样任何人都无法猜测并插入任何值。现在我想在{id}
之前和{id}
之后添加一些字符以便任何人都无法通过猜测来达到它。
Route::get('/prize/{id}','PrizeCalculateController@showPrizePage');
现在,用户可以转到localhost/laravel/public/prize/1
或用任何内容替换1,然后转到该网址。我想让它变得安全,以便任何人都不能猜测。
我尝试过:
$parameter = $qrcode->id;
$encryption= Crypt::encrypt($parameter);
确保路线安全的最佳方法是什么?
答案 0 :(得分:1)
加密ID会产生很长的(188+聊天)字符串,不太友好。
您可以生成UUID(32个字符)来表示您的模型。有许多包可以生成和验证UUID,例如this one。
要使用UUID,您应该在表格上创建一个列来表示它,然后按uuid
字段而不是id
加载模型。
由于UUID代表一个非常大的数字(128位),很难猜到它(几乎不可能,在3.402823669×10³⁸中有一次机会)。
同样难以猜测(随着您的表格大小增加,概率会增加),您可以定期使UUID过期(或者如果使用它则使其无效)。有很多方法可以保护它,但一切都取决于您的应用程序设计。
由于您不需要UUID的universally unique
部分,您也可以使用Laravel的str_random()
助手生成一个大的随机字符串。 16个字母数字字符串也很强(4.767240171×10²⁸组合)。
考虑为此路线添加速率限制也很难猜测。
答案 1 :(得分:0)
我使用此lib来哈希ID:http://hashids.org/php/
这是我的Laravel包装器:
public static function staticHash($number, $obfuscate = false)
{
$hashids = new \Hashids\Hashids(\Config::get('app.key'));
return $hashids->encode($number);
}
public static function staticHashDecode($hash, $obfuscate = false)
{
$hashids = new \Hashids\Hashids(\Config::get('app.key'));
$number = $hashids->decode($hash);
if (isset($number[0])) {
$number = $number[0];
} else {
$number = false;
}
return $number;
}