Спам сокет io соединения - PullRequest
0 голосов
/ 17 января 2020

Как предотвратить, если кто-то спамит соединение с сокетом, как это:

for (let i = 0; i < 10000000; i++) {
    io.connect('ws://localhost:9001');
}

Я гуглил, но все топики c говорят о том, как предотвратить emit с помощью ограничения скорости и т. Д. c. Но ограничение скорости не может быть использовано, если кто-то спамит соединения вместо спам-сообщения. Любое решение или намек на это? Спасибо

1 Ответ

3 голосов
/ 25 января 2020

Первым шагом каждого запроса на соединение через websocket является запрос HTTP GET handshake, поэтому вы можете ограничить количество запросов на балансировщик нагрузки / прокси-сервер по IP. Все запросы, превышающие лимит, будут отклонены до достижения вашего заявления. Например, прочитайте о том, как сделать это с Nginx веб-прокси здесь .

Если вы не можете или не хотите настраивать прокси-сервер, вы можете сделать то же самое на уровень приложения с такими пакетами, как rate-limiter-Flexible или express -rate-limit .

io.on('connection', function (socket) {
  // rate limit here by IP or user ID
});
...