Frage

Ich habe eine Reihe von $ _POST Variablen über eine lange Form eingesandt werden und statt harte Kodierung jeweils mit einem mysql_escape_string() ist es ok für mich folgendes zu tun? Ich weiß nicht, ob dies tatsächlich sicher ist, und / oder lebensfähiger Code.

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}

Ich bin ziemlich sicher, dass, weil ich das bin mit & es sie in durch Verweis ist vorbei, nicht Wert, also bin ich eigentlich den Wert in der $ _POST zu ändern.

Auch soll ich mysql_real_escape_string() statt?

EDIT: Ich bin mit PDO und () zusammen mit dem oben beschriebenen Verfahren herzustellen. Dauert diese Sorge es für mich?

War es hilfreich?

Lösung

Warum array_map() nicht?

array_map(mysql_real_escape_string, $_POST);

Aber in Wirklichkeit sollten Sie parametrisierte / Prepared Statements werden.

mysql_real_escape_string() nimmt den aktuellen Datenbank-Zeichensatz berücksichtigt, mysql_escape_string() nicht. So ist die Erstere ist die bessere Alternative im Vergleich.

Edit (im Anschluss an die OP der Bearbeitung auf die Frage oben):

Da Sie bereits PDO tun Anweisungen vorbereitet, gibt es keine Notwendigkeit, Ihre Werte zu ändern. PDO kümmert sich um alles, das ist der ganze Punkt davon ( Wenn Sie wirklich alle Daten in Parameter setzen, dh - nur verketten Zeichenfolgen SQL-Anweisungen führt zu einer Katastrophe mit gU oder ohne bauen). die Werte vorher Escaping zu entkommen Werte in der Datenbank führen würde.

Andere Tipps

Ja, Sie sollten mysql_real_escape_string() verwenden, wenn Sie diesen Weg zu gehen, gehen. Aber der richtige Weg, um sicherzustellen, dass die Variablen sind sicher an die Datenbank zu senden, wird unter Verwendung von parametrisierte Abfragen die in PHP durch bereitgestellt entweder die mysqli Funktionen oder PDO .

Zusätzlich zu den vorherigen Kommentaren, ein weiterer Vorteil parametrisiert Abfragen ist, dass die Datenbank in der Lage sein wird, besser Optimierungen zu tun und wahrscheinlich einen zwischengespeicherten Abfrageplan verwenden, so dass Sie eine bessere Leistung erhalten werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top