Ein guter erster Schritt ist die Anwendung der Methoden, die in der Frage Gert aufgeführt sind G verknüpft . Dies umfasst detailliert die Vielzahl von Funktionen, die in verschiedenen Situationen zum Reinigen von Eingaben verwendet werden können, einschließlich mysql_real_escape_string
, htmlentities()
, htmlspecialchars()
, strip_tags()
und addslashes()
Wenn möglich, ist es besser, Benutzereingaben nicht direkt in Ihre Datenbank einzufügen. Setzen Sie Validierung der Whitelist-Eingabe ein: Wählen Sie in allen Situationen, in denen Sie nur eine begrenzte Auswahl an Optionen haben, aus kodierte Werte für die Einfügung, anstatt die Eingabe von irgendeiner clientseitig zugewandten Form zu nehmen. Grundsätzlich bedeutet dies, dass Sie nur bestimmte Werte haben, die Sie akzeptieren, anstatt zu versuchen, böse / falsch geformte / böswillige Eingaben zu eliminieren.
Zum Beispiel: Wenn Sie ein Formular mit einer Dropdown-Liste für Elemente haben, verwenden Sie die Eingabe aus diesem Dropdown-Feld nicht zum Einfügen. Denken Sie daran, dass ein böswilliger Client die mit der Einreichung des Formulars gesendeten Informationen bearbeiten kann, selbst wenn Sie der Meinung sind, dass diese nur eingeschränkte Optionen haben. Lassen Sie die Dropdown-Liste stattdessen auf einen Index in einem Array in Ihrem serverseitigen Code verweisen. Verwenden Sie dann dieses Array, um auszuwählen, was eingefügt werden soll. Auf diese Weise trifft ein Angreifer, selbst wenn er versucht, Ihnen schädlichen Code zu senden, niemals Ihre Datenbank.
Offensichtlich funktioniert das nicht für Freiformanwendungen wie Foren oder Blogs. Für diese müssen Sie auf die Techniken des "ersten Schrittes" zurückgreifen. Dennoch gibt es eine breite Palette von Optionen, die durch Validierung der Whitelist-Eingabe verbessert werden können.
Sie können auch parametrisierte Abfragen (auch vorbereitete Anweisungen mit Bind-Variablen) verwenden ) für Ihre SQL-Interaktionen, wo immer möglich. Dadurch wird Ihrem Datenbankserver mitgeteilt, dass alle Eingaben einfach ein Wert sind. Dadurch werden viele der möglichen Probleme durch Injektionsattacken gemildert. In vielen Situationen kann dies sogar für Freiformanwendungen gelten.
Behandle jeden von dir ausgegebenen Wert mit htmlspecialchars () mit Standard