如何加密laravel 5.2 URL或路由?

san*_*ade 6 php encryption laravel laravel-5.2

我需要加密此URL中的路由?因为我不希望用户通过更改项ID来访问URL.例如,用户可以将/ items/1234更改为/ item/5678.虽然项目1234和5678属于同一用户,但我仍想限制行为.我想要做的是加密路线,但我不确定这是否是正确的方式.有什么建议?

Naz*_*san 6

您可以加密您的url参数并在控制器中解密它.你可以试试这个:

在您的视图中:假设您的参数是id或更多参数,您可以加密.

<?php
        $parameter =[
            'id' =>1,
        ];
    $parameter= Crypt::encrypt($parameter);
?>
<a href="{{url('/url/',$parameter)}}" target="_blank">a link</a>
Run Code Online (Sandbox Code Playgroud)

您的路线将是:

Route::get('/url/{parameter}', 'YourController@methodName');
Run Code Online (Sandbox Code Playgroud)

在您的控制器中,您可以解密您的参数:

public function methodName($id){
    $data = Crypt::decrypt($id);
  }
Run Code Online (Sandbox Code Playgroud)

您必须是控制器顶部的Crypt命名空间

use Illuminate\Support\Facades\Crypt;
Run Code Online (Sandbox Code Playgroud)

注意:您可以使用Crypt::encrypt($parameter)和解密 来加密url参数Crypt::decrypt($parameter)


Jos*_*ton 5

缓解此问题的一种方法是使用通用唯一 ID (UUID)。

您将不再遇到自动增量数据库爬行的问题,并且用户无法更改 URL 以获取不同的数据。

您可以通过将 id 列从

这个:

$table->increments('id');
Run Code Online (Sandbox Code Playgroud)

对此:

$table->uuid('id')->primary();
Run Code Online (Sandbox Code Playgroud)

然后可以通过将以下内容添加到您的类中来编辑您的模型以支持非递增主键:

protected $incrementing = false;
Run Code Online (Sandbox Code Playgroud)