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以尝试编辑另一条记录)
在后端,有几种方法可以执行此验证
您可以添加,也可以简单到:
$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');
}