Frage

Ich habe eine C \ C ++ Code, der eine Struktur über das Netzwerk empfängt, von dieser Form:

struct DataStruct
{
int DataLen;
BYTE* Data;
}

Der Code I läuft über Data in einer Schleife von DataLen Zeiten und verarbeitet die Daten.

... Das Problem:

Nachdem der Code auf Sicherheitsexperten für Penetrationstests kam, bereitete sie eine gefälschte Anwendung, die diese Struktur mit DataLen sendet größer als die tatsächliche Länge von Data. Dies bewirkt natürlich eine Zugriffsverletzung Ausnahme.

Also, die Frage ist - wie kann ich die tatsächliche Länge des empfangenen Data validieren? Ist es möglich, ohne die Struktur zu ändern?

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Nizza Sicherheitsexperten! Ich möchte meine Firma eine Abteilung wie das hatte.

Jedes Mal, wenn Daten aus dem Netz empfangen wird, meldet das Netzwerk IO die Anzahl der Bytes in den Puffer tatsächlich geschrieben, ob Sie verwendet read(2), recv(2) oder boost::asio::async_read oder irgendetwas anderes habe ich gesehen. Typischer Anwendungsfall, wenn es eine „Anzahl von Bytes zu folgen“ Feld in der Kopfzeile Ihrer Datenstruktur, ist immer wieder zu lesen Anruf / recv / etc, bis dass viele Bytes empfangen wurden (oder bis Fehler aufgetreten ist), und erst dann sollte es konstruieren und das Rück Ihre DataStruct (oder Fehler melden).

Andere Tipps

Sie wissen, wie viel Bytes, die Sie erhalten haben, so vergleichen nur mit DataLen.

Es ist unmöglich, ohne die Struktur zu verändern. Daten von TCP / IP-Socket empfangen ist klar Strom. Logischerweise ist es nicht in Pakete aufgeteilt. Physikalisches Paket kann eine oder mehrere DataStruct Instanzen enthält, kann man DataStruct Beispiel auf zwei oder mehr physikalischen Pakete aufgeteilt werden. Aktuelle Informationsstruktur kann nur verwendet werden, wenn es keine Kommunikationsfehler oder ungültige Pakete sind.

Die Korruption ist einfach, wenn Sie keine intrinsische Einschränkung.

Einige Schutzmechanismen wären:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top