Hallo!
Ich hab nun schon einiges über beachtenswerte Dinge bei der Übergabe von großen Texten in eine DB gelesen...von "magic_quotes_gpc" bis "escape"... jedoch weiß ich leider immer noch nicht welche "Behandlungen" und Überprüfungen wirklich unbedingt (um einen einigermaßen richtig formatierten Text zu erhalten), und welche optional durchzuführen sind.
Im Prinzip ist es ganz einfach:
Bevor Du einen String an die Datenbank übergibst, sollte er von entsprechenden Sonderzeichen befreit werden (bzw. geschützt), da bestimmte Zeichen wie ' in SQL-Statements eine besondere Bedeutung haben, und so zu unvorhergesehenden Ergebnissen führen, ob aus Versehen (z.B. bei der Verwendung solcher Zeichen in einem Text im Formular), oder absichtlich (SQL-Injection, um schadhaftes Verhalten zu provozieren, s.u.). Am besten ist es, hierfür die entsprechende Funktion der DB zu verwenden, da diese genau die verwendeten Sonderzeichen berücksichtigt, am Beispiel von MySQL wäre das http://de3.php.net/mysql-real-escape-string. Die entsprechende Beschreibung (z.B. welche Zeichen geschützt werden) findest Du in der MySQL-Doku: http://dev.mysql.com/doc/mysql/de/mysql_real_escape_string.html
Wenn allerdings in der php.ini magic_quotes_gpc aktiviert ist, dann werden sämtliche $_REQUEST Daten schon vor Bereitstellung im PHP-Script mit einer entsprechenden Funktion behandelt, ob gewünscht/sinnvoll, oder nicht. Wenn Du dann noch beim Schreiben in die DB sowas wie mysql_real_escape_string() verwendest, wird auf einmal alles doppelt geschützt, das heißt, wenn Du ' im Formular schreibst, wird ' in die DB geschrieben, da magic_quotes_gpc aus ' schonmal ' macht, und dann mysql_real_escape_string() \', was dann beim Ausführen des Statements wieder zu ' wird. Daher sollte man
magic_quotes_gpc lieber abschalten, allerdings darf man dann die Verwendung von mysql_real_escape_string(), als auch von entsprechenden Funktionen für Shell-Ausführung... niemals nie vergessen! Außerdem sollte man Variablen in SQL-Statements immer in '' packen, also
$sql = "SELECT... WHERE id = '$id'";
Kennt jemand hiezu eine Anleitung oder hat jemand ein paar Tipps für mich!??!
Warum man sowas macht steht im Manual: http://de3.php.net/manual/en/security.database.sql-injection.php
Grüße
Andreas
SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/