Frage

Hier sind einige Möglichkeiten, das Gespräch zu beginnen:

  1. Entgeht bei der Initialisierung allen Eingaben.
  2. Escapen Sie jeden Wert, vorzugsweise beim Generieren der SQL.

Die erste Lösung ist nicht optimal, da Sie dann die Escapezeichen für jeden Wert entfernen müssen, wenn Sie ihn in etwas anderem als SQL verwenden möchten, z. B. bei der Ausgabe auf einer Webseite.

Die zweite Lösung ist viel sinnvoller, aber das manuelle Escapen jedes Werts ist mühsam.

Ich bin mir bewusst über vorbereitete Stellungnahmen, wie auch immer ich finde MySQLi schwerfällig.Auch die Trennung der Abfrage von den Eingaben macht mir Sorgen, denn obwohl es wichtig ist, die Reihenfolge richtig zu machen, kann es leicht passieren, dass man einen Fehler macht und somit die falschen Daten in die falschen Felder schreibt.

War es hilfreich?

Lösung

Wie @Rob Walker feststellt, sind parametrisierte Abfragen die beste Wahl.Wenn Sie das neueste und beste PHP verwenden, würde ich Ihnen dringend empfehlen, einen Blick darauf zu werfen gU (PHP-Datenobjekte).Dabei handelt es sich um eine native Datenbankabstraktionsbibliothek, die eine Vielzahl von Datenbanken (einschließlich MySQL natürlich) sowie vorbereitete Anweisungen mit benannten Parametern unterstützt.

Andere Tipps

Vorbereitete Aussagen sind die beste Antwort.Sie müssen testen, weil Sie Fehler machen können!

Sehen Das Frage.

Ich würde vorbereitete Aussagen verwenden.Wenn Sie vorbereitete Anweisungen verwenden möchten, sollten Sie sich wahrscheinlich die PDO-Funktionen für PHP ansehen.Dadurch können Sie nicht nur vorbereitete Anweisungen einfacher ausführen, sondern sind auch etwas datenbankunabhängiger, da Sie keine Funktionen aufrufen, die mit mysql_, mysqli_ oder pgsql_ beginnen.

PDO könnte sich eines Tages lohnen, aber es ist noch nicht so weit.Es ist ein DBAL und seine Stärke besteht (angeblich) darin, den Wechsel zwischen Anbietern einfacher zu machen.Es ist nicht wirklich darauf ausgelegt, SQL-Injections abzufangen.

Wie auch immer, Sie möchten Ihre Eingaben umgehen und bereinigen. Die Verwendung vorbereiteter Anweisungen könnte eine gute Maßnahme sein (ich stimme dem zu).Obwohl ich glaube, dass es viel einfacher ist, z.durch Nutzung Filter.

Ich habe immer die erste Lösung verwendet, da in 99 % der Fälle Variablen vorhanden sind $_GET, $_POST, Und $_COOKIE werden niemals an den Browser ausgegeben.Sie werden auch niemals versehentlich Code mit einer SQL-Injection schreiben (es sei denn, Sie verwenden in der Abfrage keine Anführungszeichen), wohingegen Sie bei der zweiten Lösung leicht vergessen könnten, irgendwann einen Ihrer Strings zu maskieren.

Eigentlich habe ich es immer so gemacht, weil auf allen meinen Websites standardmäßig die Einstellung „magic_quotes“ aktiviert war und wenn man erst einmal viel Code mit einer dieser beiden Lösungen geschrieben hat, erfordert die Änderung viel Arbeit zum anderen.

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