拒绝来自不是服务器 IP 的 UP 的 nodejs 连接 [重复]
Posted
技术标签:
【中文标题】拒绝来自不是服务器 IP 的 UP 的 nodejs 连接 [重复]【英文标题】:Deny nodejs connections from IPs that arent the server IP [duplicate] 【发布时间】:2017-08-24 21:13:16 【问题描述】:好的,我有一个使用 socket.io 和 NodeJS 制作的聊天应用程序。
用户名是通过 html 对象的值设置的,因此用户无法更改用户名。
但问题是,如果用户将其粘贴到开发工具中,用户可以创建与套接字 io 服务器的连接,并且仍然使用另一个用户名发送消息:
var socket = io.connect('http://*.*.*.*:3000');
socket.emit('send', message: 'message', username: 'user' );
如何让节点服务器只接受来自服务器的连接,这样用户就不能执行上面的代码了。
我希望我已经足够清楚了。谢谢。
【问题讨论】:
用户名是通过 HTML 对象的值设置的,因此用户无法更改用户名。他们可以按 F12 并轻松操作 我认为您要问的问题与我对标题的预期不同。您想限制从其他 IP(即设备)访问节点,还是不允许 socket.io 会话,除非用户通过您的 Web 界面。两种截然不同的东西。 我认为您真正想要的是每个 IP 一个连接,对吧? 【参考方案1】:拒绝来自不是服务器 IP 的 IP 的 nodejs 连接
如果您拒绝来自不是服务器 IP 的 IP 的连接,那么您将拒绝与所有用户的连接,因为他们每个人 - 无论他们使用自己的用户名还是其他人的用户名 - 都在连接从他们的浏览器和他们自己的 IP 地址到您的服务器。
用户名是通过 HTML 对象的值设置的,因此用户无法更改用户名。
任何人都可以很容易地改变它。只需右键单击页面并单击检查,您就可以更改任何您想要的 HTML。
您需要对用户进行身份验证,而不是依赖他们自称的身份。例如,您可以使用 passport.socketio
之类的东西从 Socket.io 连接访问经过 Passport.js 身份验证的用户信息 - 请参阅:
我不知道您是否使用 Passport.js 对用户进行身份验证。希望您使用某些东西进行身份验证,但您的问题并不清楚。您可以在以下位置找到更多信息:
http://passportjs.org/它有很好的文档。
现在,话虽如此,如果您仍然想拒绝来自不是服务器 IP 的 IP 的连接,那么您可以在您的连接处理程序中执行以下操作:
io.on('connection', socket =>
if (socket.handshake.address !== YOUR_SERVER_IP)
socket.disconnect();
// your normal code here
);
如何让节点服务器只接受来自服务器的连接,这样用户就不能执行上面的代码了。
以上方法可以解决问题,但我怀疑届时是否有人能够使用您的服务。
【讨论】:
以上是关于拒绝来自不是服务器 IP 的 UP 的 nodejs 连接 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Nodejs 中使用 Jasmine 测试 promise 是不是被解决或拒绝