dedlfix: Datei in mysqlDatenbank ablegen, [BLOB - 0 B]

Beitrag lesen

Tach!

Schau Dir mal den Unterschied zwischen addslashes() und mysqli_real_escape_string() an, welche Bytewerte ("Zeichen" wäre hier mMn nicht richtig) da escaped werden.

mysql(i)_real_escape_string() beachtet die mit mysql(i)_set_charset() ausgehandelte Kodierung (nicht aber ein SET-NAMES-Statement). Für die hierzulande verwendeten Kodierungen ISO-8859-x und UTF-8 ergibt sich aber hinsichtlich der Wirkungsweise keine Unterschied. Alle Zeichen liegen eineindeutig im überall gleichen ASCII-Bereich.

Da Du die Datei über die Textschnittstelle von MySQL übergibst, die ja bekanntlich Daten und Befehle mischt, musst Du die Daten auch für diese Textschnittstelle vorbereiten, damit eben nicht einzelne Bytewerte dazu führen, dass die Textschnittstelle sie (und nachfolgende) als Befehl auffasst.

Ist mit addslashes() prinzipiell ausreichend passiert. Die restlichen Zeichen, die die mysql(i)-Funktionen zusätzlich berücksichtigen, spielen in Statements keine Rolle.

Umgehen kannst Du das mit "prepared Statements". Dort werden die Werte vom Programm ins Statement eingebaut. Und das kümmert sich dann auch um das Escaping.

Nein, das kümmert sich nicht drum, das hat gar kein Escaping nötig.

Beim Hochladen von Dateien solltest Du auf jeden Fall darauf achten, dass diese auf dem Server nicht (ungeprüft) in einem per HTTP/s zugänglichen Pfad landen. Außerdem solltest Du keine von Usern vorgeschlagenen Dateinamen (ungeprüft) übernehmen. Besser ist immer ein auf dem Server generierter ungefährlicher Dateiname.

Dateinamen spielen in dem Fall keine Rolle, da der Dateiinhalt gleich in der Datenbank landet und der Name ein vom System selbst vergebener temporärer Name ist?

Du würdest dir sonst eine Sciherheitslücke in deinen Server reißen. Es könnten Skripte dabei sein oder wichtige Dateien überschrieben werden.

Ich seh zwar in dem gezeigten Code eine Menge Verbesserungspotenzial, aber keine Sicherheitslücke.

dedlfix.