Php Laravel验证传递的数据并防止用户更改

Php Laravel验证传递的数据并防止用户更改,php,laravel,Php,Laravel,我以前问过这个问题,没有得到准确的答案,因为我知道不可能阻止用户使用inspect元素更改值,但是如果我使用带有{{csrf_field()}}的表单,用户仍然可以检查元素并更改id的值作为示例。 正如一些人所说,为了验证数据,这些数据将被传递到控制器,控制器将对其进行验证,但是如果控制器接收到id=2而不是1,则这是可以的,因此用户可以从检查元素更改id,您对此有什么解决方案吗 示例(我使用ajax将数据传递给控制器) {{csrf_field()}} @foreach($stores作为$

我以前问过这个问题,没有得到准确的答案,因为我知道不可能阻止用户使用
inspect元素
更改值,但是如果我使用带有
{{csrf_field()}}
的表单,用户仍然可以
检查元素
并更改
id
的值作为示例。 正如一些人所说,为了验证数据,这些数据将被传递到控制器,控制器将对其进行验证,但是如果控制器接收到
id=2
而不是
1
,则这是可以的,因此用户可以从
检查元素
更改
id
,您对此有什么解决方案吗

示例(我使用ajax将数据传递给控制器)


{{csrf_field()}}
@foreach($stores作为$store存储)
@endforeach
拯救

我看到您正在使用Laravel

正如用户所说,您应该在后端进行验证

首先,为了安全起见,不为用户显示增量let ID(这将使其易于猜测-例如,用户更改存储ID以尝试编辑另一条记录)

在后端,有几种方法可以执行此验证

您可以添加,也可以简单到:

  • 获取登录的用户ID,如下所示:

    $user\u id=Auth::user()->id;
    
  • 确保
    用户
    拥有商店(获取他发送的
    请求
    的商店,并检查用户
    id是否相同?)取决于您的体系结构


  • 如果用户通过inspect元素更改存储id,则可以在控制器或中间件中应用以下内容:

    if (! in_array($request->store_id, Auth::user()->stores->pluck('id')->toArray()) {
        abort('403');
    }
    
    比这更好的是了解Laravel提供的授权服务

    我会建议你写一些
    并付诸行动。这就是我在和你现在一样的位置上所做的


    通过这样做,您将很快意识到通过inspect元素保护应用程序免受数据篡改的可行性。

    您可以通过将id设置为非序列号来混淆id

    有一个专门用于此方法的Laravel包:

    这个软件包生成素数而不是随机字符串,这样速度相当快

    此包将对模型的主要id值进行编码和解码

    使用此软件包时,此过程是自动化的,因为还有两个类似的软件包,但自动化程度要低得多:


    是否要随表单提交值/数据,而您不希望用户能够更改此值/数据?是的,这正是我想要的,我尝试了很多方法,但仍然可以使用
    session_start()更改try
    $\u会话['mydata']='thedata'
    然后在ajax端调用session_start()再次,然后您可以从
    $\u会话['mydata']获取数据但即使这不是完全证明,仍然可以找到对处理脚本执行验证的方法。在某些情况下,但我不建议这样做,您也可以使用嵌套在表单中的
    ,但这也可以操作。关键在于验证所有用户输入,每件事都有一个致命的弱点。这里是我不想要的登录用户!!!我的意思是说,用户是网站上的任何一个人,而不是那些登录良好的人,那么我的朋友,问题是你的架构。如果您不希望用户更改<代码> StureSyId,请考虑使用命名路由,例如“代码>存储/我的存储/产品< /代码>。这样,您就不会在表单上传递数据,而是动态地(在请求名称上传递存储段塞)或固定地传递数据。没有理解您的意思!我的意思是“用户未登录用户”,我的网站为未登录用户工作
    if (! in_array($request->store_id, Auth::user()->stores->pluck('id')->toArray()) {
        abort('403');
    }