【发布时间】:2023-02-23 15:50:15
【问题描述】:
我正在构建一个相当大的站点,该站点在很多地方都使用了 Laravel Livewire,包括一些敏感组件,例如帐户更新。
我想确保我没有遗漏任何明显的安全漏洞。
假设我有一个像这样的 Livewire 组件:
class AccountInformation extends Component
{
/**
* @var array
*/
public $form_data = [
'first_name' => '',
'last_name' => '',
'email' => '',
'telephone' => '',
];
/**
* @return void
*/
public function submit()
{
$this->validate();
auth()->user()->update($this->form_data);
}
}
我们还假设我的 User 模型没有任何属性在模型中受到保护。
Laravel 校验和是否足够安全以确保黑客无法将 'id' 传递到请求中并更新不同用户的帐户?
例如,我可以像这样发送一个 curl 请求:
{
"fingerprint":{
"id":"xxxxxxxx",
"name":"account-form",
"locale":"en",
"path":"customer/account-form",
"method":"GET",
"v":"acj"
},
"serverMemo":{
"children":[
],
"errors":[
],
"htmlHash":"1111111",
"data":{
"form_data":{
"id":10000,
"first_name":"Bob",
"last_name":"Sith",
"email":"naughty@hacker.com",
"telephone":"999"
}
},
"dataMeta":[
],
"checksum":"9fa4a09176237dc7224fe5e0d9d9656ccd8c88e4007f17008db000ffbb93f2fd"
},
"updates":[
{
"type":"callMethod",
"payload":{
"id":"jzoh",
"method":"submit",
"params":[
]
}
}
]
}
所以在上面的请求中,我在 form_data 中添加了一个“ID”字段。在没有任何类型的篡改检查的情况下,这将使用 id 100000 更新用户。
在 Livewire 文档和我的测试中,Livewire 会抛出一个错误,因为表单未通过校验和测试,但我只想绝对确定我不需要做更多的事情来保护 Livewire 组件免受这种“篡改”?
【问题讨论】: