Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wenn ich alle Eingaben maskiere, hinterlässt es manchmal Schrägstriche (\) in der Zeichenfolge und fügt sie in die Datenbank ein. Warum passiert das und wie kann ich das lösen?

Sie haben recht.
Magische Anführungszeichen haben nichts mit SQL-Zeug zu tun und sollten nicht damit verbunden werden.
Weil magische Anführungszeichen ein Site-weites Problem sind und SQL-Escape nur ein SQL-bezogenes Problem ist.

Daher müssen sie unterschiedlich behandelt werden und sollten niemals zusammen verwendet werden.

Sie müssen magische Anführungszeichen unbedingt entfernen, da sie nicht nur SQL-Zeug, sondern jede Datenmanipulation Ihrer Website verderben.

Es wäre also ratsam, etwas Stripslashes-Code in eine beliebige Bootstrap-Datei einzufügen, die bei jedem Aufruf des Skripts ausgeführt wird. Den Code finden Sie in zahlreichen Implementierungen eines solchen Codes, googlen Sie einfach nach der Funktion 'stripslashes_deep'.

Es wäre ratsam, diesen Code trotz des tatsächlichen Zustands der magischen Anführungszeichen immer auszuführen (natürlich unter der Bedingung, die get_magic_quotes_gpc() überprüft), nur aus Kompatibilitätsgründen.

Aber es gibt eine andere Möglichkeit, sie auszuschalten:Versuchen Sie, eine php.ini-Datei im Stammverzeichnis Ihrer Anwendung zu erstellen.

In Ihrem Code ist jedoch ein schwerwiegender Fehler. Tatsächlich schützt es nichts.
Sie entkommen $memberid und $postid aber nicht zitieren! . Somit besteht überhaupt kein Schutz. Nur weil das Escapezeichen nur funktioniert, wenn es mit Anführungszeichen verwendet wird.

Bitte denken Sie daran:

Flucht ist kein Synonym für Sicherheit!

Alleine zu fliehen hilft nichts. Es gibt eine ganze Reihe von Regeln, die befolgt werden müssen.

Ich habe kürzlich eine anständige Erklärung geschrieben, also würde ich mich nicht wiederholen:Ersetzen von mysql_*-Funktionen durch PDO und vorbereitete Anweisungen