【发布时间】:2020-01-17 05:04:23
【问题描述】:
如果有人像这样的垃圾邮件套接字连接如何防止:
for (let i = 0; i < 10000000; i++) {
io.connect('ws://localhost:9001');
}
我已经用谷歌搜索了,但所有主题都在谈论如何通过速率限制等来防止emit。但是如果有人发送垃圾邮件而不是垃圾邮件,则不能使用速率限制。对此有任何解决方案或提示吗?谢谢
【问题讨论】:
如果有人像这样的垃圾邮件套接字连接如何防止:
for (let i = 0; i < 10000000; i++) {
io.connect('ws://localhost:9001');
}
我已经用谷歌搜索了,但所有主题都在谈论如何通过速率限制等来防止emit。但是如果有人发送垃圾邮件而不是垃圾邮件,则不能使用速率限制。对此有任何解决方案或提示吗?谢谢
【问题讨论】:
每个 websocket 连接请求的第一步都是 HTTP GET 握手请求,因此您可以通过 IP 限制负载均衡器/代理服务器上的请求数量。在到达您的申请之前,所有超过限制的请求都将被拒绝。 例如,阅读有关如何使用 Nginx 网络代理 here 来做到这一点。
如果您不能或不想设置代理服务器,您可以在应用程序级别使用 rate-limiter-flexible 或 express-rate-limit 等软件包执行相同操作。
io.on('connection', function (socket) {
// rate limit here by IP or user ID
});
【讨论】: