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

时间:2018-08-04 23:39:28

标签: php laravel

我之前曾问过这个问题,但没有得到准确的答案,因为我知道无法阻止用户使用inspect element来更改值,但是如果我将表单与{{ csrf_field() }}一起使用,则用户仍然可以{ {1}},并更改inspect element的值作为示例。 而且,如某些人所述,要验证数据,这些数据将传递到控制器并在那里进行验证,但是如果控制器收到id而不是id=2,这是可以的,那么用户可以从1更改id,您对此有什么解决方案?

示例(我正在使用Ajax将数据传递给控制器​​)​​

inspect element

3 个答案:

答案 0 :(得分:0)

我看到您正在使用Laravel。

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

首先,为了安全起见,不显示增量让用户ID (这会使用户容易猜测-例如,用户更改商店ID尝试编辑另一条记录)< / p>

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

您可以添加Policy,也可以很简单:

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

    $user_id = Auth::user()->id;
    
  2. 确保user拥有商店(获取他发送了request的商店,并检查用户id是否相同?)取决于您的体系结构。

答案 1 :(得分:0)

如果用户通过inspect元素更改了商店ID,则可以在控制器或中间件中应用如下内容:

if (! in_array($request->store_id, Auth::user()->stores->pluck('id')->toArray()) {
    abort('403');
}

熟悉Laravel提供的 Authorization 服务比这更好。

https://laravel.com/docs/5.6/authorization

我建议您写一些并付诸行动。那是我和你现在在同一位置时所做的。

这样做,您很快就会意识到,通过检查元素来保护应用程序免受数据篡改是多么可行。

答案 2 :(得分:0)

您可以通过将ID设置为非连续数字来对其进行混淆。

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

https://github.com/Propaganistas/Laravel-FakeId

此程序包生成质数而不是随机字符串,这样会更快。

此程序包将对模型的主要ID值进行编码和解码。

使用此软件包时,此过程是自动化的,因为有两个与此相似的软件包,但自动化程度较低:

https://github.com/cybercog/laravel-optimus

https://github.com/jenssegers/optimus