Каковы хорошие практики программирования в отношении блокировки DoS-атак на UDP-клиент / сервер? Единственное, что приходит на ум в данный момент, это игнорирование пакетов с неверными источниками, как таковыми (с использованием WinSock2):
if (oSourceAddr.sa_family == AF_INET) {
uSourceAddr = inet_addr(oSourceAddr.sa_data);
if (uSourceAddr == oCorrectDestAddr.sin_addr.S_un.S_addr) {
queueBuffer.push(std::string(aBuffer));
}
}
Достаточно быстрые атаки могут привести к блокировке цикла — особенно если размер пакета небольшой. Есть ли способ, которым я могу предотвратить поступление пакетов из определенного источника или из любого источника, кроме правильного? Какие еще вещи я должен высматривать? Объяснение в форме кода будет особенно полезно, если решения уже встроены в API.
Есть ли способ, которым я могу предотвратить поступление пакетов из определенного источника или из любого источника, кроме правильного?
Да. Просто connect()
сокет к этому правильному источнику. Затем UDP отфильтрует все дейтаграммы с других адресов. Увидеть человек 2 подключиться, абзац о сокетах SOCK_DGRAM.
Других решений пока нет …