Es gibt zwei sehr wichtige Dinge, die Sie tun müssen, um ernsthafte Sicherheitsprobleme zu vermeiden.
-
Sie müssen die Benutzereingabe maskieren, bevor Sie sie in Ihre SQL-Abfrage einfügen. Escape bedeutet, dass alle Sonderzeichen wie
'
maskiert werden; Glücklicherweise gibt es eine Funktion, die das bereits automatisch macht:mysql_real_escape_string .Wenn Sie Benutzereingaben nicht umgehen, können unangenehme Dinge passieren. Stellen Sie sich vor, Ihre Abfrage lautet
INSERT INTO userdata VALUES ('$user_data')
. Stellen Sie sich nun vor, dass der Benutzer'; DROP DATABASE userdata;
.Wenn Sie es nicht maskieren, wird Ihre Abfrage zu:
INSERT INTO userdata VALUES (''; DROP DATABASE userdata;')
. Wie Sie sich vorstellen können, ist das nicht gut:Wenn Sie mehrere Anweisungen aktiviert haben, können Sie sich von Ihrer Datenbank verabschieden. Dies wird als SQL-Injection bezeichnet Angriff. -
Wenn Sie Ihre Variable an den Benutzer ausgeben, müssen Sie auch HTML-Sonderzeichen ordnungsgemäß durch HTML-Entitäten ersetzen. Glücklicherweise gibt es auch dafür eine Funktion:htmlspecialchars() . Es transformiert die speziellen HTML-Zeichen wie
<
zu<
.Dies scheint ein Problem zu sein, das oft unterschätzt wird, aber in Wirklichkeit ist es sehr ernst. Stellen Sie sich vor,
$user_data
enthält<script>SomeNastyScript()</script>
. Es könnte vorhandene Sicherheitslücken im Browser Ihrer Benutzer ausnutzen, oder es könnte ein Nicht-HTTPOnly-Cookie (das gespeicherte Passwörter enthalten kann) an den Angreifer senden, oder es könnte den Benutzer dazu verleiten, sein Passwort in ein Formular zu schreiben, das durch die Manipulation von generiert wurde das DOM (möglich in Javascript) oder viele andere schlechte Dinge.Dies wird als XSS bezeichnet (Cross-Site-Scripting).
Kurzfassung
-
Rufen Sie
mysql_real_escape_string
auf auf die Zeichenfolge, bevor Sie sie in Ihre SQL-Abfrage einfügen (aber nicht, wenn Sieecho
es). -
Rufen Sie
htmlspecialchars
auf auf die Zeichenfolge, bevor sie dem Benutzer angezeigt wird (aber nicht, wenn Sie sie in die Datenbank einfügen).