2012-03-28 11 views
2

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

+0

Schutz vor SQL-Injection zu helfen, ist bereits in dem ganzen Ort gut abgedeckt. Sie können auch vorbereitete Anweisungen in Betracht ziehen. – GordonM

Antwort

5

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 mysqlihttp://sg.php.net/mysqli zu verwenden, es vorbereitete Anweisung liefern Sie Ihre SQL herauszufiltern

+0

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). –

+0

@tandu das besser? –

+0

Ja, ich denke schon. –

0

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.

3

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