好的,我有一个用socket.io和NodeJS制作的聊天应用程序。
用户名是通过HTML对象的值设置的,这样用户就无法更改用户名。
但问题是,用户可以创建与socket io服务器的连接,如果他们将其粘贴到开发工具中,仍会使用其他用户名发送消息:
var socket = io.connect('http://*.*.*.*:3000');
socket.emit('send', { message: 'message', username: 'user' });
如何让节点服务器只接受来自服务器的连接,以便用户无法执行上述代码。
我希望我足够清楚。感谢。
答案 0 :(得分:0)
拒绝来自不是服务器IP的IP的节点连接
如果您拒绝来自非服务器IP的IP的连接,那么您将拒绝与所有用户建立连接,因为每个用户 - 无论是否使用自己的用户名或其他人的用户名 - 都在连接从他们的浏览器到你的服务器,从而他们自己的IP地址。
用户名是通过HTML对象的值设置的,这样用户就无法更改用户名。
任何人都可以轻松改变它。只需右键单击页面并单击“检查”,即可更改所需的任何HTML。
您需要对用户进行身份验证,而不是依赖于他们所说的用户。例如,您可以使用passport.socketio
之类的东西从Socket.io连接访问Passport.js经过身份验证的用户信息 - 请参阅:
我不知道您是否使用Passport.js来验证用户身份。希望你使用一些东西进行身份验证,但是你的问题并不清楚。您可以在以下网址找到更多信息:
它有很棒的文档。
现在,已经说过,如果您仍然想要拒绝来自非服务器IP的IP的连接,那么您可以在连接处理程序中执行类似的操作:
io.on('connection', socket => {
if (socket.handshake.address !== YOUR_SERVER_IP) {
socket.disconnect();
}
// your normal code here
});
如何让节点服务器只接受来自服务器的连接,以便用户无法执行上述代码。
上述方法可以解决问题,但我怀疑任何人都可以使用您的服务。