我将请求验证用作
php artisan make:request ClientRequest
如您所见,在客户端编辑表单上,如果密码字段不为空,我可以使用**$request-〉validated()方法更新数据库,
但是,如果密码字段为空(用户不想更改密码),
我无法使用$request-〉except('password')-〉validated()方法。
由于这种情况,我使用了$request-〉except()**方法。
这是否会造成安全问题?
public function update(ClientRequest $request, Client $client)
{
$validated = $request->validated();
if($request->filled('password') )
{
Client::whereId($client->id)->update($validated);
}else{
Client::whereId($client->id)->update($request->except('password'));
}
return redirect('/clients')->with('success', 'success');
}
2条答案
按热度按时间cwxwcias1#
这一行确实带来了一个很大的安全问题,特别是当您依赖验证来设置字段而不是
fillable
属性时。$request->except('password')
将返回用户提交的所有其他字段,因此如果用户在请求中添加了类似is_admin => true
的内容,您最终将在数据库上设置它(如果它存在)。您可以对验证过的数据使用
\Illuminate\Support\Arr::except()
,以确保您只获得所需的数据。**PS:**您已经通过路由模型绑定了客户端,因此不需要查询它,您可以直接更新该客户端,即
83qze16e2#
在这两种情况下,您都在验证发送到
update()
的所有字段。如果您在两种情况下都发送了 password 字段,但只在其中一种情况下验证了它,那么您就会遇到问题。
所以从这个Angular 看我觉得很好。