Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何加密laravel 5.2 URL或路由?_Php_Laravel_Encryption_Laravel 5.2 - Fatal编程技术网

Php 如何加密laravel 5.2 URL或路由?

Php 如何加密laravel 5.2 URL或路由?,php,laravel,encryption,laravel-5.2,Php,Laravel,Encryption,Laravel 5.2,我需要加密此URL中的路由?因为我不希望用户通过更改项目id来访问URL。例如,用户可以将/items/1234更改为/item/5678。虽然项目1234和5678属于同一个用户,但我仍然希望限制该行为。我试图做的是加密路由,但我不确定这是否是一种正确的方法。有什么建议吗?您可以加密url参数并在控制器中解密它。您可以尝试以下方法: 在您的视图中:假设您的参数是id或更多可以加密的参数 <?php $parameter =[ 'id' =>1

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

您可以加密url参数并在控制器中解密它。您可以尝试以下方法:

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

<?php
        $parameter =[
            'id' =>1,
        ];
    $parameter= Crypt::encrypt($parameter);
?>
<a href="{{url('/url/',$parameter)}}" target="_blank">a link</a>
在控制器中,可以解密参数:

public function methodName($id){
    $data = Crypt::decrypt($id);
  }
您必须是控制器顶部的加密命名空间

use Illuminate\Support\Facades\Crypt;

注意:您可以使用
Crypt::encrypt($parameter)
加密url参数,并使用
Crypt::decrypt($parameter)
解密url参数。您需要加密url ID/任何url参数,这称为ID混淆。你可以用它来做。它将像347这样的整数转换为yr8,然后再转换回来

包括此库

composer require hashids/hashids
你可以从中得到所有其他简单的东西

这将帮助您加密URL id:


希望这对你有帮助

您不想加密所有路由,这是一种不好的做法。您可以使用
encrypt()
helper对参数进行加密,并使用
decrypt()
对其进行解密

$encryptedId = encrypt($id);

听起来您想加密整个路由。这可能不是一个好的做法,但下面是如何做到这一点。您将有一个控制器接收所有请求。所有业务逻辑都需要放在您的服务中

  • 在路由文件中,有一个指向“/{encrypted}”和controller@method(姓名由你决定)

  • 在控制器方法中,解密加密的参数。可能解密的字符串是“item/100”。然后需要
    $routeParams=explode('/',$decrypted)
    并将其发送到服务以进行处理。e、 g

  • if($routeParams[0]=='item'){
    returnitemservice::get($routeParams[1]);
    }
    


    这是基本的想法。但在实践中,您将拥有一个处理程序类来管理加密URL的路由。在这个处理程序类中,您需要有一个功能类似于Laravel路由文件的配置数组。

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

    您将不再存在自动增量数据库爬网的问题,用户也不能更改URL以获取不同的数据

    通过从更改id列,您可以非常轻松地更改数据库以在迁移中支持此功能

    这:

    为此:

    $table->uuid('id')->primary();
    
    然后,通过向类中添加以下内容,可以编辑模型以支持非递增主键:

    protected $incrementing = false;
    

    您可以在重定向时在控制器中加密路由,使用

    \Crypt::加密(产品id)

    在产品页面上,您可以使用

    $product\u id=\Crypt::decrypt($url\u参数)

    这是最好的办法


    但是,如果用户编辑URL中的Product ID参数,您将需要处理该参数,则可能会出现异常情况。

    我将给出一个对我来说非常有效的过程。请原谅,如果这个主题目前不相关。但如果是,请注意我为解决个人项目问题而采取的以下步骤

  • 这是我加密博客id/服务id/产品id的视图

  • 根据以上内容,我们将修改我们的路线(web.php),如下所示

  • Route::get('/blog_feed/{id}','BlogController@show')->name('blogs.show')

  • 最后,在控制器中,您将执行路由模型绑定步骤

    公共功能显示($id)


  • 希望对以后的搜索有所帮助

    我可以加密路由吗?您可以通过路由/url对视图中的所有参数进行加密。只需解密控制器中的参数。就这样是的,你是对的,但我需要加密参数和路由。可能是你不能加密路由内的路由。只有您可以从视图和控制器进行加密。您不能在路由中对其进行加密,而是在控制器中对其进行加密“尽管项目1234和5678属于同一用户,但我仍希望限制该行为”。为什么?如果确实存在这样做的问题/用例,那么请使用该用例制作一个中间件。您可以为路由提供别名并加密参数。我现在坚持类似的要求。。你是怎么做到的?我希望我的url是这样的,例如
    http://example.com/users/Mj3
    http://example.com/hjksdhsdfssdf8/Mj3
    我认为没有必要为这个简单的函数包含一个包。如果提问者要走这条路,那么最好在应用程序中创建一个简单的函数,它没有你建议的包那么重。@Josh Bolton你是对的,但这就是不同之处。你可以举youtube URL这样的例子。这绝对是解决这个问题的更好方法,你坚持正常的惯例,但是提供了一个更强大的方法来保护你的用户id
    $encryptedId = encrypt($id);
    
    $table->increments('id');
    
    $table->uuid('id')->primary();
    
    protected $incrementing = false;
    
    {
       $id = Crypt::decrypt($id);
       $blog = Blog::where('id', $id)->first();
       $user = User::where('id', $blog->user_id)->first();
       return view('blogs.show', compact('blog', 'user'));
    }