Атака на WebSocket! Как обойти?
Для меня WebSocket всегда был нечто передовым и инновационным. Отправляешь всего 1 запрос на сервер и он устанавливает соединение, через которое данные передаются в реальном времени.
Но мне стало интересно что произойдёт, если я или кто-то другой захочет поиграться и, например, запустить цикл for на 1_000_000 итераций и в каждой отправлять сообщение на сервер? Не долго думая, мой ноут начал чуть ли не взлетать от взвинченных кулеров, а WebSocket-сервер покорно трудился над поставленной задачей. Nginx, выступая в качестве прокси-сервера, как бы сказал "пока!", потому что запрос-то всего один был — при установлении соединения. Он даже не может влиять на лимит скорости в этом Web-Socket-соединении... На просторах интернета совершенно нет никакой информации о каком-либо лимитировании в веб-сокетах... И вот казалось бы — когда разрабатывали стандарт, неужели было сложно добавить пару заголовков на установление лимитов скорости, размера передаваемых сообщений, количества сообщений в единицу времени? Чтоб прямо из браузера низя было делать а-та-та? Есть ли какое-то решение для установления ограничений в WebSocket на стороне клиента? И как вообще теперь с этим жить...
const socket = new WebSocket("ws://localhost:8081");
let message = '';
socket.onopen = function() {
for(let i = 0; i < 1_000_000; i++) {
message += '1234567890';
socket.send(message);
}
}
|
Ограничения на кол-во сообщений/обращений должно быть на стороне сервера, не клиента.
Без rate limiter'а не стороне сервера подобные ограничения на стороне клиента - как дверь в открытом поле. В http3, я почему то уверен, подобных заголовков тоже нет, если не считать 429 status code за оные. |
| Часовой пояс GMT +3, время: 22:44. |