我有一个用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。
我这样做的所有数据必须返回'作为发送'到后端。