Ich lese aus dem Kochbuch (Abschnitt 4.2)
CakePHP schützt Sie bereits vor SQL-Injection, wenn Sie die ORM-Methoden von CakePHP (wie find () und save ()) und die richtige Array-Notation (dh array ('field' = & gt; $ value)) anstelle von Raw SQL verwenden . Zur Bereinigung gegen XSS ist es im Allgemeinen besser, Roh-HTML in der Datenbank ohne Modifikation zu speichern und bei der Ausgabe / Anzeige zu bereinigen.
So sind wir sicher, dass wir NIEMALS Benutzerdaten gegen SQL manuell bereinigen müssen, vorausgesetzt, wir beschränken uns auf Methoden wie find () und save ()? Insbesondere, ist das wahr, wenn ich meine Daten direkt von $ _POST anstelle von $ this- & gt; Daten nehme? Mit anderen Worten angenommen, ich führe eine find () -Abfrage mit $ this- & gt; -Daten durch. Dann bereinigen CakePHP gegen SQL beim Schreiben des Arrays $ this- & gt; data oder beim Schreiben der Abfrage für find ()?
Meine zweite Frage ist, dass die Bereinigung von Daten angezeigt werden soll. Ist Sanitize :: html idempotent? Also, kann ich es in meiner BeforeSave () -Methode verwenden, oder wird es beim zweiten Mal brechen, weil es erneut angewendet wird und ein neues Ergebnis ergibt?
Über diese Frage:
CakePHP sanitize gegen SQL beim Schreiben des Arrays $ this- & gt; data oder beim Schreiben der Abfrage für find ()?
Cakephp räumt $ this- & gt; -Daten im Controller nicht ab, wenn Sie den Cake-Code in Dispatcher :: parseParams () überprüfen. Ссылка Sie werden sehen, dass, wenn $ _POST in Controller-Daten kopiert wird, die Werte nicht bereinigt werden.
Die Verwendung von $ _POST wird jedoch nicht empfohlen, da Sie die Magie des Kuchens, die Sie mit dem Formularhelfer erhalten, verlieren.
Woah - Wenn Sie Ihre Daten direkt von $ _POST als verwenden, sollten Sie die Daten unbedingt bereinigen , wenn Sie die Veröffentlichung der Daten auf den folgenden Seiten planen. Ich erinnere mich vor etwa 2 Jahren an einen großen Schrecken, weil sich herausstellte, dass einfache SQL-Injection es ermöglichen würde, Kuchen 1.1-Sites auszunutzen, die aufgrund des Layouts von Select-Abfragen für die Anmeldung verwendet wurden.
Allerdings haben viele Benutzer absichtlich die alte Regel für Eingabefelder verwendet, die in SQL verwendet werden würden:
"Benutzereingaben dürfen nicht direkt in SQL-Anweisungen eingebettet werden, um sich gegen SQL-Injection zu schützen. Benutzereingaben müssen stattdessen maskiert werden."
SO, ja, das war ein separates Problem, aber die gleiche Idee - obwohl CakePHP Chef ist und für uns sehr viel ist, sollten wir seiner Sicherheit niemals blind vertrauen. Der Leistungseinfluss durch das Scrubbing von Daten ist nahezu gleich Null. Also mach es einfach.
Nein, es wird dich nicht beeinflussen. Sie können es in before_save()
verwenden. Wenn Sie eine benutzerdefinierte Abfragefunktion verwenden, d. H. Funktionen, in denen Sie eine eigene Abfrage verwenden können, müssen Sie eine Desinfektion durchführen.
Tags und Links cakephp sanitization