flawopen.com/Mass Assignment/Erklärt
Mass Assignment: Risiken und sichere Feldfreigaben
Stell dir ein Modell als Formular mit Nutzerfeldern und Bedienelementen für Mitarbeitende vor. Den gesamten Request zu binden lässt Kunden auch Eigentümer, Freigabe oder Rolle setzen. Lege editierbare Felder serverseitig fest und autorisiere Datensatz und Aktion getrennt.
# Rails: request keys reach model attributes User.new(params[:user]) // Node / Mongoose: request object used as update await User.findByIdAndUpdate(id, req.body); // Express + Sequelize: request object used as create values await User.create(req.body); # Django: request keys passed as model fields User.objects.create(**request.POST.dict())
# Rails — permit only user-editable fields attrs = params.require(:user).permit(:name, :email) user = User.new(attrs) // Node — construct an allowlisted update const { name, email } = req.body; await User.findByIdAndUpdate(id, { name, email }); # Django — explicit ModelForm fields class UserForm(ModelForm): class Meta: model = User fields = ["name", "email"] // .NET — bind a DTO, then map explicitly user.Name = input.Name; user.Email = input.Email;
Warum serverseitige Allowlisten wichtig sind
Eine Sperrliste wie „alles außer role“ versagt, wenn ein neues sensibles Feld hinzukommt. Bei einer Allowlist bleiben neue Felder gesperrt, bis sie ausdrücklich freigegeben werden. Rails Strong Parameters weisen nicht erlaubte Attribute bei der Massenzuweisung zurück; der Controller muss Felder dennoch auf die Aktion beschränken. DTO, Serializer oder Formular mit Feldliste schaffen dieselbe Grenze.
Eine Allowlist begrenzt Request-Attribute, berechtigt aber nicht zur Datensatzänderung. Beschränke den Datensatz auf den authentifizierten Principal, autorisiere die Aktion und trenne privilegierte Änderungen.
Kategorien sensibler Felder
Prüfe Modellattribute, verschachtelte Serializer und Update-Endpunkte auf:
- ✓Eigentümer- und Mandantenschlüssel — user_id, account_id, tenant_id. Erzwinge Zuordnung serverseitig und vertraue keinem Client-Eigentümer.
- ✓Rollen, Berechtigungen und Status — role, is_admin, email_verified, status. Ändere sie nur über einen autorisierten Serverablauf.
- ✓Finanzwerte und verschachtelte/Systemfelder — Salden, Rabatte, Guthaben, Beziehungen, Zeitstempel und IDs können Regeln beeinflussen oder Updates erweitern. Gib jedes Feld gezielt frei und validiere es.
Häufige Fragen
Das sind verschiedene Schwächen. Mass Assignment setzt unerwartete Attribute auf einem erstellten oder aktualisierten Objekt. Prototype Pollution verändert Prototyp-Eigenschaften und kann die Suche anderer Objekte beeinflussen. Unsicheres Merge kann dazu führen; Mass Assignment hängt von der Nutzung der Eigenschaften ab. Siehe Prototype Pollution.
Nein. Eine Mutation kann ein zu breites Eingabeobjekt annehmen. Beschränke Eingabetypen auf editierbare Felder und prüfe Objekt und Aktion im Resolver oder Service.
Nein. Das Formular beschränkt keinen HTTP-Client. Behandle Felder als nicht vertrauenswürdig, prüfe die Struktur serverseitig und akzeptiere nur Aktionsfelder.