laravel获取经过验证的数据`request()->input('key')和request()->validated['key']` 的区别

更新时间:2024-04-15 19:52
有时候我们会认为经过验证器验证后的某个字段比如 ‘sku’经过验证器验证后,获取他的值使用input('sku')和validated()['sku']没有区别。
获取这样考虑`因为他已经经过验证了呀,没有通过的直接在验证阶段就报错了,所以input获取的值和validated()获取的值一样`。

其实这样忽略了当 `key`的值为数组的情况。正常获取验证后的值可以确保每个`数组key`都是经过验证的,不会有多余的数组key。可是使用input方法就会获取到原始输入。从而可能导致安全风险。

举个例子:

验证规则:
'sku' => ['required', 'array'],
'sku.*.sku' => ['string', 'max:255'],
'sku.*.stock' => ['integer', 'min:0'],

打印:
halt($request->input('sku'));
halt($validated['sku']);*/



 
当sku数组中多添加一个key的时候 sku[‘testkey'],
那么input方法会获取到testkey的值,如果你直接使用获取到的data保存到数据库就会导致异常或者安全问题。