Mass Assignment mit Rails 3.2.3 im Griff

Vor mittlerweile zwei Monaten hat Egor Homakov mit einem kleinen Hack auf eine potentielle Lücke durch Attributzuweisungen in Rails-Anwendungen aufmerksam gemacht. Die Rails Entwickler haben sich des Problems angenommen und mit Rails 3.2.3 eine Lösung für alle neuen Rails-Anwendungen geschaffen. Doch wie aktualisiert man eine bestehende?

Worum geht es?
Attributzuweisungen sind integraler Bestandteil von Rails und erlauben das einfache und bequeme Setzen mehrerer Model-Attribute auf einmal. Oft kommt das Konstrukt beim Anlegen oder Aktualisieren neuer Models in Controllern zum Einsatz.

Doch genau dadurch hat ein Angreifer potentiellen Zugriff auf alle Attribute eines Models.
Wer es genauer wissen möchte, sei auf den Abschnitt Mass Assignments aus dem Rails Security Guide verwiesen.

Was ist die Lösung?
Seit Rails 3.2.3 wird in neuen Anwendungen standardmäßig ein Whitelist Modus für Attribute in jedem Model aktiviert. Das bedeutet, Entwickler müssen jedes Attribut, welches durch Mass Assignment zugewiesen werden soll, mittels attr_accessible oder attr_protected in eine Whitelist aufnehmen. Alle anderen Attribute können nur einzeln und nicht per Mass Assignment zugewiesen werden.

Update bestehender Anwendungen
Bestehende Anwendungen müssen erst auf Rails 3.2.3 aktualisiert werden. Das geschieht am einfachsten durch Anpassen der Gemfile Datei mit

und anschließendem bundle update rails.

Bleibt noch die Whitelist für alle Modelle über die config/application.rb zu aktivieren.

Danach ist die Anwendung sicher und es beginnt die eigentliche Arbeit 🙂
Wohl dem, der eine hohe Testabdeckung hat. Denn die Tests, die vor dem Update hoffentlich durchgelaufen sind, meckern jetzt fehlende Whitelist Einträge an. Die gilt es nachzupflegen.

Nach diesen einfachen Schritten mit etwas Monkey-Work am Ende gehört die Mass-Assignment Lücke der Vergangenheit an.

Mass Assignment mit Rails 3.2.3 im Griff
Markiert in: