Behandelt CakePHP automatisch Sicherheitslücken bei Massenzuweisungen, wenn geänderte Daten gespeichert werden?

8

Bearbeiten:

Nachdem ich mehr Informationen von DCoder erhalten habe, ist der Satz, nach dem ich gesucht habe, eine "Massenzuordnungs-Schwachstelle". Das heißt, den Vorteil von Methoden zu nutzen, die alle gültigen Felder in der Datenbank speichern, unabhängig von ihrer Anwesenheit auf dem ursprünglichen Formular (wodurch sie anfällig für manipulierte POST-Daten werden, die mehr [möglicherweise kritischere] Felder als die vorgesehenen enthalten ).

Die zwei üblichen Antworten werden dann entsprechend als Whitelisting und Blacklisting bezeichnet; Whitelisting-Felder, die zur Änderung bestimmt sind, oder Blacklisting-Felder, die nicht geändert werden sollen.

Dann kommt meine Frage: Verfolgt CakePHP automatisch nur die Felder im sendenden Formular, oder ist es für mich (und andere Cake-Fans) notwendig, vorsichtig zu sein, dass wir eine Whitelisting oder eine Blacklisting durchführen?

Ursprüngliche Frage:

Cake bietet viele großartige Möglichkeiten, um Formulare zu generieren und sie fast automatisch zu verarbeiten. Als ich über Sicherheit nachdachte, fragte ich mich: Ist Cake bewusst, welche Felder in einem Formular vorhanden waren, oder akzeptiert es einfach ein beliebiges gültiges Feld? Nehmen Sie das folgende Szenario, wenn ich keinen Sinn habe (und jemand ist willkommen, meine Frage so zu bearbeiten, dass sie besser formuliert ist, wenn sie sich einen besseren Weg vorstellen können, sie auszudrücken):

Sagen wir, ich erlaube meinen Nutzern, ihr Profil zu bearbeiten. Ich erstelle ein Formular mit Feldern für Benutzername, E-Mail und Passwort unter der Aktion edit .

Ein schlauer Benutzer möchte hereinkommen und sein is_admin -Feld von false auf true ändern. Daher verwenden sie eine App wie Firebug, um benutzerdefinierte Postdaten an die Aktion edit zu senden, die das Feld% enthält. co_de% wird auf is_admin gesetzt.

Die Frage ist, würde Cake selbst feststellen, dass true nicht in der ursprünglichen Form war, oder muss ich vorsichtig sein, die einzigen Felder explizit anzugeben, die Felder einer bestimmten Aktion modifizieren können? Gibt es einen einfacheren Weg?

Danke!

James

    
xtraorange 05.05.2012, 03:03
quelle

2 Antworten

4

Sie müssen die SecurityComponent in Ihren Controller (n) laden und CakePHP wird die Manipulation von Formularen für Sie verhindern, siehe Ссылка

    
dhofstet 05.05.2012, 05:26
quelle
-2

CakePHP verfügt über eine eingebaute Validierungsoption. Das Formular generiert automatisch die Felder und führt die Validierung basierend auf den Validierungskriterien durch, die Sie im Modell erwähnt haben. Diese Validierung wird automatisch vor der Save-Methode aufgerufen.

Auch wenn Sie eine benutzerdefinierte Validierung hinzufügen möchten, können Sie diese im Modell hinzufügen.

Mit Ihrer spezifischen Abfrage können Sie das Feld is_admin aus dem Bearbeitungsformular entfernen, damit es für den Benutzer nicht bearbeitet werden kann. Wenn Sie mehr Sicherheit hinzufügen und sicherstellen möchten, dass das Feld is_admin einen falschen Wert hat, können Sie den Wert in der Controller-Methode bearbeiten.

In der Editiermethode können Sie den folgenden Code hinzufügen, bevor Sie die Aktion Speichern aufrufen.
$this->request->data['ModelName']['is_admin] = false;

    
Saanch 05.05.2012 04:13
quelle