Massa toewijzing in Rails
Stephan Kaag di 05 jan 10
De gevolgen voor de veiligheid van een applicatie ten gevolge van mass assignment in Rails zijn al vanaf de eerste versie gedocumenteerd. Toch blijken lang niet alle applicaties hier goed mee om te gaan.
Mass assignment
@user = User.new(params[:user])
In de regel hierboven wordt mass assignment gebruikt om een nieuwe User instantie aan te maken en direct alle (door de browser verstuurde) attributen in te stellen.
Als er geen extra maatregelen worden genomen kan iemand met kwaad in de zin zijn eigen parameters meesturen en deze dus direct (automagisch) laten instellen. Stel dat een er een kolom is_admin bestaat, dan is in die normaal gesproken direct beïnvloedbaar voor misbruik met alle mogelijke gevolgen van dien.
has_many :blog_posts
Het zijn niet alleen database kolommen die op deze manier misbruikt kunnen worden. Stel je voor dat de bovenstaande regel ook in het user-model aanwezig is. Doordat has_many toestaat om direct de id’s via mass assignment in te stellen kan een kwaadwillende user[blog_post_ids][] meesturen om toegang te krijgen tot iemand anders’ blog-posts!
Beveiliging
Rails biedt de class method attr_accessible aan die een whitelist- oplossing gebruikt voor beveiliging. Als je attr_accessible gebruikt kan je de attributen aangeven die je via mass-assignment instelbaar wilt maken en alle andere attributen zullen beveiligd worden.
Gepost in hor | 1 reactie
Welcome to Holland On Rails
This weblog is the official Ruby techblog from the guys at Holder, a Ruby development company. Holder is also the company behind the RubyAndRails Europe Conference in Amsterdam.Recente Jobs
Bekijk alle jobs »»
Gereedschapskist
Onmisbare tools vooriedere developer!
- Ruby On Rails
Framework voor de web 2.0 developer. Eindelijk vooruitgang! - TextMate
Editor for true pro's
Typ, tab, top :-)
Nee, niet voor Win. - Made On A Mac
En nou is het over met die saaie grijze Windows bak van je!
Auteurs op deze site
Chris Obdam
'Less is more' evangelist, past dit ook dagelijks toe op zijn tandenborstel.Chiel Wester
Snelheidswonder op Ruby wielen. Leuk om mee te pair-programmen ;-)
Michael di 05 jan 10 19:26
Dit is misschien ook een leuke gem http://github.com/cjbottaro/param_protected
Kan je accessors zetten per actie en nested params
Plaats je reactie