Laravel 5 /表格安全(需要澄清)

问题描述 投票:4回答:3

我完全不相信Laravel形式的安全性已经足够了。例如,如果表单包含<input type="hidden" name="user_id">,那么显然黑客可以在提交更新之前更改该值。虽然我在CSRF上看过here,但我还没有完全理解这是否足够保护?

例如。考虑到上述情况,如果我去一个网站并打开一个表格来编辑一个我可以查看但不会改变的记录,并且恶意改变“user_id”,这个表格是否受到{{ csrf_field() }}保护或者我是否应该使用它就足够了一些进一步的安全性,如Crypt::encrypt($id)隐藏user_id(保存在数据库中)和Crypt::decrypt($id)

在客户端浏览器中公开行ID(如用户ID)被认为是一种不好的做法(即使所有内容都是通过https发送的)?

非常感谢

laravel security
3个回答
2
投票

不,在这种情况下仅使用CSRF令牌是不够的。您还需要使用策略,警卫,中间件来保护您的应用程序。

在这种情况下,有人可以改变user_id,如果你从表单中读取并在之后使用,所以你需要使用像这样的策略来保护数据(这个例子是from the docs):

public function update(User $user, Post $post)
{
    return $user->id === $post->user_id;
}

此外,当您需要使用用户ID时,如果您需要整个对象,请始终使用auth()->id()auth()->user()。永远不要从表单中读取用户ID。


2
投票

Laravel框架将此CSRF字段的值存储为会话变量,并在您提交时将其匹配。

当您提交表单时,Laravel会从存储的会话值中检查该值。如果存在不匹配,则抛出错误! :)


2
投票

CSRF令牌保护站点免受跨站点请求,意味着外部用户无法复制表单并发送帖子请求。 Laravel创建一个随机会话令牌,我们使用csrf_field()或Session :: token()函数将其置于隐藏字段中。在处理表单之前,Laravel会使用表单中的隐藏字段值检查会话。

© www.soinside.com 2019 - 2024. All rights reserved.