Video: Week 4 2024
Die erste Regel der Vermeidung von Code injizieren in C ++ - Programme ist nie, überhaupt, , dass Benutzereingaben von einem Universal-Sprachinterpreter verarbeitet werden können. Ein häufiger Fehler bei der SQL-Injection besteht darin, dass das Programm Benutzereingaben akzeptiert, als wäre es immer akzeptabel und fügt es in eine SQL-Abfrage ein, die es dann zur Verarbeitung an die Datenbank-Engine schickt.
Als Beispiel könnte ein Programm, das nach einer Benutzereingabe an einem Datum fragt, gehackt werden. Der sicherste und benutzerfreundlichste Ansatz wäre, dem Benutzer eine Kalendergrafik zur Verfügung zu stellen, aus der er die Start- und Enddaten auswählen kann. Das Programm würde dann ein Datum erstellen, das darauf basiert, worauf der Benutzer geklickt hat.
Wenn dies nicht möglich ist, sollte das Programm die Eingabe sorgfältig überprüfen, um sicherzustellen, dass die Eingabe im richtigen Format für ein Datum war, in diesem Fall yyyy / mm / dd < - mit anderen Worten, vier Ziffern gefolgt von einem Schrägstrich, gefolgt von zwei Ziffern und einem Schrägstrich und schließlich zwei weiteren Ziffern. Nichts anderes sollte als akzeptable Eingabe betrachtet werden. Manchmal können Sie über das Format nicht so spezifisch sein. Wenn Sie dem Benutzer erlauben müssen, flexiblen Text einzugeben, können Sie zumindest Sonderzeichen vermeiden. Zum Beispiel ist es so gut wie unmöglich, die SQL-Code-Injection ohne Verwendung eines einzelnen oder doppelten Anführungszeichens auszuführen.
// überprüfe einige Zeichenfolgen, um sicherzustellen, dass es gerade ASCII-size_type off = s ist. find_first_not_of ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_"); if (off! = string:: npos) {cerr << "errorn";}
Dieser Code durchsucht die Zeichenfolge
s nach einem Zeichen, das nicht zu den Zeichen A bis Z gehört, a bis z, 0 bis 9 oder Unterstrich. Wenn es ein solches Zeichen findet, weist das Programm die Eingabe zurück.