如何防止用户在ajax调用中更改重要数据?



我有一个用laravel和websockets创建的聊天应用程序,我使用laravel echo来收听聊天频道

这是一个ajax调用来发送消息:

var data = {
"_token": '{{csrf_token()}}',
"from_user": '{{ Auth::user()->id }}',
"chat_id": chat_id,
"to_user": to_user,
"message": message
};
$.ajax({
method: "POST",
data: data,
url: $url,
}).done(function( msg ) {
console.log(msg);
});

即使,我正在验证发送者id是否与服务器端当前登录的用户id匹配,用户也可以轻松更改"to_user";id。这可能会导致不必要的行为,例如用户可以向他们无法访问的人或好友列表中的人发送消息。

我该如何预防?

如果to_user的id是使用php生成的,则可以使用$key=pasword_hash("secret$id", PASSWORD_DEFAULT)并将其与$id一起传递给web客户端。AJAX与$id$key一起发送,并在后端检查password_verify("secret$id", $key),如果这失败了,有人已经更改了$id或$key。

我这样做的所有数据必须返回'作为发送'到后端。

最新更新