Wie zu vermeiden, Code-Injektion in C ++

Die erste Regel Code zu vermeiden injizieren in C ++ Programme ist nie, jemals, erlauben Benutzereingabe von einem Allzwecksprachdolmetscher verarbeitet werden. Ein häufiger Fehler bei SQL-Injektion ist, dass das Programm eine Benutzereingabe akzeptiert, als ob es immer akzeptabel waren und fügt sie in eine SQL-Abfrage, die es dann Schiffe aus, um die Datenbank-Engine für die Verarbeitung.

Als Beispiel könnte ein Programm fragt für die Benutzereingabe auf einen Zeitpunkt, gehackt werden. Die sicherste und benutzerfreundlichen Ansatz wäre dem Benutzer eine Kalendergraphik zur Verfügung zu stellen, von dem er die Start- und Enddatum auswählen können. Das Programm würde dann erstellen Sie ein Datum auf das, was der Benutzer geklickt hat.

Wenn dies nicht möglich ist, dann überprüfen Sie das Programm, sollten sorgfältig den Eingang, um sicherzustellen, dass die Eingabe in das richtige Format für ein Datum war, in diesem Fall yyyy / mm / dd - in anderen Worten, gefolgt vier Stellen durch einen Schrägstrich, gefolgt von zwei Ziffern und einem Schrägstrich und schließlich noch zwei Ziffern. Nichts anderes sollte akzeptabel Eingang berücksichtigt werden.

Manchmal kann man # 8242-t sein, dass über das Format spezifisch. Wenn Sie dem Benutzer ermöglichen, muss flexibel Text eingeben, dann können Sie zumindest vermeiden Sie Sonderzeichen. Zum Beispiel ist es # 8242-s ziemlich unmöglich, ohne entweder mit einer einfachen oder doppelten Anführungszeichen SQL Code-Injektion zu tun.

Sie können # 8242-t Insert HTML-Tags, ohne einen weniger als (lt;) unter Verwendung von und größer als (>) Zeichen. Oder Sie könnten nehmen Sie nur den Ansatz, dass etwas anderes als ASCII-Text wird nicht toleriert:

// Eine Schnur überprüfen # 8242-s # 8242- um sicherzustellen, dass es # 8242-s gerade ASCIIsize_type off = s.find_first_not_of ( "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890 _") - if (! Off = string :: npos) {cerr lt; lt; "Fehler n" -}

Dieser Code durchsucht die Zeichenfolge s für ein Zeichen, dass # 8242-s nicht eines der Zeichen A bis Z, a bis z, 0 bis 9, oder unterstreichen. Wenn sie einen solchen Charakter findet, dann verwirft das Programm den Eingang.

Wenn Sie nur die lateinischen Buchstaben hier gezeigt zu ermöglichen, werden nicht Ihre Anwendung in vielen Auslandsmärkten nutzbar sein wie diejenigen, die don # 8242-t Gebrauch englischen Zeichensätze (wie Arabisch, Chinesisch, Hebräisch oder Russisch, um nur ein paar ). Sie können den umgekehrten Weg nehmen und nur für die schlechten Zeichen aussehen.

Menü