Ich habe eine Textarea, deren Wert in eine MySQL-Datenbank eingefügt wird. Um gegen eine mysql-Injektion zu schützen, verarbeite ich die Eingabe über nl2br, mysql_real_escape_string, htmlentities oder eine Kombination aus 2 oder allen 3? In welcher Reihenfolge verarbeite ich die Daten?Textarea Schutz gegen Mysql-Injektion - PHP
Antwort
nl2br
grundsätzlich wandelt alle "\n"
-"<br/>"
, so dass ich nicht sehen, wie es mit SQL-Injection hilft (nicht mysql injection btw)
mysql_real_escape_string
wird normalerweise für diese Art von thi verwendet ng.
htmlentities
wird verwendet, um Missgeschicke zu vermeiden, bei denen Benutzer bösartige <script>
in Ihre Website injizieren, wenn Sie Benutzereingaben zulassen. Beachten Sie, dass es in der Regel eine gängige Praxis ist, Zeichenketten zu speichern und nur htmlentities
anzurufen, wenn Sie Ihre Zeichenkette ausgeben. Sie müssen wissen, was jedes der oben genannten Dinge tut und nur dann verwenden, wenn Sie es brauchen, nicht kombinieren Sie sie wie sie könnte das Zeug noch schlimmer kaputt machen.
Eine weitere bessere und sicherere Alternative für Sicherung Ihrer Datenbank ist mysqli
http://sg.php.net/mysqli zu verwenden, es vorbereitete Anweisung liefern Sie Ihre SQL herauszufiltern
Das ist irreführend. 'mysqli' filtert sql nicht" automatisch "aus. Sie müssen speziell vorbereitete Anweisungen verwenden. Es wäre sehr einfach, eine Abfrage mit einer Injektion in mysqli zu konstruieren (oder einen anderen unsauberen DB-Wrapper). –
@tandu das besser? –
Ja, ich denke schon. –
Wenn Sie vorbereitete Anweisungen mit PDO oder mysqli verwenden, dann binden Sie einfach den Parameter. Wenn Sie die alte mysql-Erweiterung verwenden, sollten Sie mysql_real_escape_string()
verwenden.
Die nur Verarbeitung Sie beim Einsetzen brauchen, ist mysql_real_escape_string
, aber es ist bevorzugt, dass Sie vielleicht mit PDO
oder MDB2
vorbereiteten Anweisungen verwenden.
Nie speichern codierte Daten in einer Datenbank. Sie sollten immer die Rohdaten speichern. Verwenden Sie nicht nl2br
oder htmlentities
für die Speicherung. Sie sollten es jedoch für Display verwenden, wenn die Daten in das DOM eingefügt werden (nl2br
ist rein visuell, htmlentities
wird helfen, vor XSS zu schützen). Beachten Sie auch, dass htmlspecialchars
bevorzugt werden kann, je nachdem, wie Sie mit dem Display umgehen möchten - dies sollte für einen grundlegenden XSS-Schutz ausreichend sein.
Denken Sie daran, dieses Mantra:
- Flucht für die Lagerung
- Encode für die Anzeige
Schutz vor SQL-Injection zu helfen, ist bereits in dem ganzen Ort gut abgedeckt. Sie können auch vorbereitete Anweisungen in Betracht ziehen. – GordonM