Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.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

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.4:如何跨页面视图安全地跟踪所选项目?_Php_Laravel_Laravel 5_Laravel 5.4 - Fatal编程技术网

Php Laravel 5.4:如何跨页面视图安全地跟踪所选项目?

Php Laravel 5.4:如何跨页面视图安全地跟踪所选项目?,php,laravel,laravel-5,laravel-5.4,Php,Laravel,Laravel 5,Laravel 5.4,我是Laravel的新手,我正在为多个用户建立一个网站,在其中一个页面上列出与登录用户相关的项目,允许用户单击一个项目,然后在下一个页面上查看或编辑详细信息。这是一个非常简单的概念,但我想知道当Laravel提供详细信息页面时,如何简单而安全地知道单击了哪个项目并显示正确项目的详细信息 解决这一问题的明显方法是,在详细信息页面的URL中指定项目的主键ID,即第一页列表中的每个项目,然后指定使用该ID返回正确项目的路由: Route::get('/itemdetails/{ID}', 'MyCon

我是Laravel的新手,我正在为多个用户建立一个网站,在其中一个页面上列出与登录用户相关的项目,允许用户单击一个项目,然后在下一个页面上查看或编辑详细信息。这是一个非常简单的概念,但我想知道当Laravel提供详细信息页面时,如何简单而安全地知道单击了哪个项目并显示正确项目的详细信息

解决这一问题的明显方法是,在详细信息页面的URL中指定项目的主键ID,即第一页列表中的每个项目,然后指定使用该ID返回正确项目的路由:

Route::get('/itemdetails/{ID}', 'MyController@showitemdetailspage');
然后使用指定的ID进行数据库查找。 问题是,这是完全不安全的,即任何用户都可以在ID字段中尝试不同的号码,并访问其他用户的项目详细信息

那么,我如何在Laravel中安全地做到这一点,使用户不能伪造ID等? 我正在考虑使用会话或ID散列之类的东西,但不确定如何实际实现这一点

因为我是新手,所以非常感谢源代码或具体细节


非常感谢。

任何放在URL中作为标识符的内容都可能被破解,某种散列可以减慢速度(显著),但不会解决您的问题,最好使用“正确”身份验证。
在控制器内,您可以检查用户是否有权访问指定页面

public function showitemdetailpage($ID){
    $someModel = MyModel::find($ID);
    if($someModel->user_id == Auth::user()->id){
        return view('myawesomeview', ['detail' => $someModel]);
    }
    abort(404);
}
我在这里选择了404错误,以防止其他用户发现指定的detailPage是否存在,您还可以返回状态代码
403
(不允许)。这会让其他用户知道详细信息页面存在,但他们无法访问

通过阻止访问而不是混淆ID,您可以确保没有人可以访问页面,即使他们确实拥有url(当然,这只有在正确实现身份验证的情况下才有效)


我的示例只是检查身份验证的一种方法,Laravel有一种精心设计的方法,通过使用他们的门来授权人员和行为,您可以阅读更多信息。

URL中作为标识符的任何内容都可以被破解,某种哈希可以减慢速度(显著),但不会解决您的问题,您最好使用“适当的”身份验证。
在控制器内,您可以检查用户是否有权访问指定页面

public function showitemdetailpage($ID){
    $someModel = MyModel::find($ID);
    if($someModel->user_id == Auth::user()->id){
        return view('myawesomeview', ['detail' => $someModel]);
    }
    abort(404);
}
我在这里选择了404错误,以防止其他用户发现指定的detailPage是否存在,您还可以返回状态代码
403
(不允许)。这会让其他用户知道详细信息页面存在,但他们无法访问

通过阻止访问而不是混淆ID,您可以确保没有人可以访问页面,即使他们确实拥有url(当然,这只有在正确实现身份验证的情况下才有效)


我的示例只是检查身份验证的一种方法,Laravel有一种精心设计的方法,通过使用他们的大门来授权人员和操作,您可以阅读更多信息。

会话是安全存储此类信息的最佳方式!您可以使用
session()->put('key','value')
在会话中添加值。这意味着您可以这样做来输入任意多的值!它将安全地存储您的数据,正如我认为Laravel将其存储在文件中一样!


当您不需要特定会话中的值时,可以通过删除除登录信息以外的所有信息(
session()->忘记('key')
)来清除会话值,或者您可以将其存储在数组中,当不再需要时删除整个数组!我也会在我的系统中存储服务器的ID,因为一个用户可以管理多个服务器

如果有帮助,请告诉我

会话是安全存储此类信息的最佳方式!您可以使用
session()->put('key','value')
在会话中添加值。这意味着您可以这样做来输入任意多的值!它将安全地存储您的数据,正如我认为Laravel将其存储在文件中一样!


当您不需要特定会话中的值时,可以通过删除除登录信息以外的所有信息(
session()->忘记('key')
)来清除会话值,或者您可以将其存储在数组中,当不再需要时删除整个数组!我也会在我的系统中存储服务器的ID,因为一个用户可以管理多个服务器

如果有帮助,请告诉我

如果您使用内置的Laravel auth,您可以在控制器顶部使用一个简单的构造函数,并记住使用
use auth
如果是干净的安装,您还必须运行
php artisan make:auth

use Auth;

class WhateverController extends Controller
{
    public function __construct()
         {
             $this->middleware('auth', ['except' => 'logout']);
         }

    ... Your Controller code

这将允许(除注销外)仅访问auth(在Laravel中默认设置为用户)

如果您使用内置Laravel auth,您可以在控制器顶部使用一个简单的构造函数,并记住使用
use auth
如果是干净的安装,您还必须运行
php artisan make:auth

use Auth;

class WhateverController extends Controller
{
    public function __construct()
         {
             $this->middleware('auth', ['except' => 'logout']);
         }

    ... Your Controller code

这将允许(除注销外)仅访问auth(Laravel中的auth默认设置为用户)

谢谢。这将确保非用户(即公开)无法查看详细信息页面,但不会阻止一个用户查看另一个用户的详细信息页面,因为他们都将登录/授权。谢谢。这将确保非用户(即公开)无法查看详细信息页面,但不会阻止一个用户查看另一个用户的详细信息页面,因为他们都将登录/授权。谢谢,但在会话中,我看不到如何跟踪用户单击的项目(让服务器调出正确的详细信息记录)以及如何防止用户访问未经授权查看的其他用户的项目详细信息?感谢感谢,但在会话中,我看不到如何跟踪用户clic的项目