【发布时间】:2023-04-04 12:10:01
【问题描述】:
我是 Socket.IO 的新手,我刚刚在http://socket.io/get-started/chat/ 实现了有关 Socket.IO 的教程说明。挺有意思的。
但现在我担心安全问题。 发送消息的客户端代码为:
<script>
var socket = io();
$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
});
</script>
函数调用 socket.emit 将向服务器发送消息,通过此流程,任何访问网络的人都可以轻松修改 Javascript 代码(使用 Chrome devtools 或 Firebug)以向服务器发送任何消息。
例如,用户可以添加如下代码行:
<script>
$(document).load(function() {
socket.emit('chat message', '1122');
socket.emit('get_users', null);
socket.emit('delete_user', 1); // What ever he wants
});
</script>
此 hack 可能会对系统造成危害。
我的问题是,如何防止用户修改Javascript代码并手动调用socket.io服务器,包括有权登录Web应用程序的用户。
任何帮助将不胜感激!
【问题讨论】:
-
归根结底,后端逻辑仍将是处理对套接字发出的请求的逻辑。一个“聊天消息”请求可能并不意味着对服务器或一个“get_users”请求,而是一个预设在服务器后端的“asdfga”。
-
我理解您的意思是程序必须使用别名作为消息名称。例如,get_users 消息,我可以使用名为 'a00002' 的消息。我说的对吗?
标签: javascript node.js security socket.io