Php 如何加密laravel 5.2 URL或路由?
我需要加密此URL中的路由?因为我不希望用户通过更改项目id来访问URL。例如,用户可以将/items/1234更改为/item/5678。虽然项目1234和5678属于同一个用户,但我仍然希望限制该行为。我试图做的是加密路由,但我不确定这是否是一种正确的方法。有什么建议吗?您可以加密url参数并在控制器中解密它。您可以尝试以下方法: 在您的视图中:假设您的参数是id或更多可以加密的参数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
<?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);
听起来您想加密整个路由。这可能不是一个好的做法,但下面是如何做到这一点。您将有一个控制器接收所有请求。所有业务逻辑都需要放在您的服务中
$routeParams=explode('/',$decrypted)
并将其发送到服务以进行处理。e、 gif($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参数,您将需要处理该参数,则可能会出现异常情况。我将给出一个对我来说非常有效的过程。请原谅,如果这个主题目前不相关。但如果是,请注意我为解决个人项目问题而采取的以下步骤
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'));
}