拒绝来自不是服务器 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 身份验证的用户信息 - 请参阅:

https://github.com/jfromaniello/passport.socketio

我不知道您是否使用 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 和 MySQL)

在 Nodejs 中使用 Jasmine 测试 promise 是不是被解决或拒绝

express js,拒绝连接到来自其他计算机的端点

执行 nodejs 脚本作为子进程(不是来自其他脚本)

来自其他容器的 Docker mongo 图像“连接被拒绝”

Nginx 访问被上游 nodeJs 拒绝