3 Stimmen

Sichere UDP Socket Programmierung

Was sind gute Programmierpraktiken in Bezug auf das Blockieren von DoS-Angriffen auf einen UDP-Client/Server? Das Einzige, was mir im Moment einfällt, ist das Ignorieren von Paketen mit falschen Quellen, wie zum Beispiel (unter Verwendung von 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));
    }
}

Angriffe, die schnell genug sind, könnten dazu führen, dass dies in einer Schleife blockiert - insbesondere, wenn die Paketgröße klein ist. Gibt es eine Möglichkeit, zu verhindern, dass Pakete von einer bestimmten Quelle oder einer anderen als der richtigen Quelle eingehen? Auf welche anderen Dinge sollte ich achten? Eine Erklärung in Form von Code wäre besonders hilfreich, wenn die Lösungen bereits in die API integriert sind.

6voto

user207421 Punkte 297318

Gibt es einen Weg, wie ich verhindern kann, dass Pakete von einer bestimmten Quelle oder von jeder Quelle außer der richtigen ankommen?

Ja. Verbinde einfach den Socket mit dieser richtigen Quelle. Dann filtert UDP alle Datagramme von anderen Adressen aus. Siehe man 2 connect, den Absatz über SOCK_DGRAM-Sockets.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X