• +49 (0)911 49 52 23-0
  • Login
  • Kontakt
  • Newsletter
  • Warenkorb
Logo der Webmasters Akademie Webmasters
Akademie
  • Weiterbildungen
      • Online Marketing (Einzelkurse)

      • Zertifizierte:r Online Marketing Berater:in – Verkaufspsychologie im Web
      • Zertifizierte:r Content-Marketing-Manager:in – Content Management, Blogs & E-Mail-Marketing
      • Zertifizierte:r Social-Media-Manager:in – Social Media Marketing & Management
      • Zertifizierte:r SEM-Manager:in & Web-Analyst:in – SEO/GEO, Ads & Web Analytics
      • Zertifizierte:r SEO- & GEO-Manager:in – Optimierung für Suchmaschinen & KI-Systeme
      • Zertifizierte:r PPC-Manager:in – Pay Per Click Performance-Marketing in Google Ads und anderen Plattformen
      • Zertifizierte:r Web-Analyst:in – Webanalyse und -statistik mit Google Analytics (GA4) & Google Tag Manager
      • Künstliche Intelligenz (KI) – 3-stufige Weiterbildung KI-Manager:in

      • Zertifizierte:r KI-Manager:in – KI-Strategie, Business Transformation & Change Management
      • Zertifizierte:r KI-Assistent:in – Kompetenznachweis nach EU AI Act
      • Zertifizierte:r KI-Beauftragte:r – Implementierung von KI im Unternehmen
      • KI steuern: Framework für verantwortungsvolle KI
      • Mit KI führen: Unternehmensstrategie & Transformation
      • Webdesign

      • Zertifizierte:r Bootstrap-Entwickler:in – Web-Interfaces mit Bootstrap entwickeln
      • Zertifizierte:r Web Designer:in – UI/UX Experte für Web-Interface-Entwicklung
      • Zertifizierte:r Web-Designer:in & Bootstrap-Entwickler:in – Professionelle Websites mit HTML, CSS & Bootstrap entwickeln
      • Web-Entwicklung

      • Relationale Datenbanken & SQL – Experte für Datenbank-Design, Management & SQL
      • Zertifizierte:r JavaScript/TypeScript Frontend Entwickler:in – JavaScript, TypeScript & React
      • Zertifizierte:r PHP & Laravel Entwickler:in – Professionelle Webanwendungen mit MySQL, PHP & Laravel
      • Web- und Medieninformatik

      • Zertifizierte:r Fullstack Web-Entwickler:in – Diploma in Web Development (WPI)
      • Zertifizierte:r Web- und Medieninformatiker:in – Diploma in Web Engineering (WPI)
      • Künstliche Intelligenz (KI)

      • Zertifizierte:r KI-Prompt-Engineer:in – Profi-Prompts zur Steuerung von KI-Systemen
      • Zertifizierte:r KI-Trainer:in – Trainieren von KI-Systemen im Unternehmen
      • Projektmanagement

      • Zertifizierte:r Manager:in für agile Projekte (WPI) – Modernes Projekmanagement von den Grundlagen über Scrum bis ORK
      • Online Marketing Diploma (WPI)

      • Zertifizierte:r Online Marketing Manager:in – Diploma in Digital Marketing (WPI)
      • Datenschutz

      • Zertifizierte:r Datenschutzbeauftragte:r (DSB) – Externer oder interner Datenschutzbeauftragter (Artikel 37 der Datenschutz-Grundverordnung (DSGVO))
      • Administration

      • Zertifizierte:r Linux-Administrator:in – Von den Grundlagen bis zur Verwaltung eines kompletten Systems mit allen Diensten
      • Alle Kurse
  • Für Unternehmen
  • Ihr Fernstudium
    • Wie läuft ein Fernstudium bei uns ab?
    • Häufige Fragen
    • Ihre Vorteile
    • Weiterbildung per Bildungsgutschein
    • Berufsbegleitend weiterbilden
    • Weiterbildungsprogramme für Unternehmen und Mitarbeiter
    • Weiterbildungen für Selbstzahler
    • Studienvertragsbedingungen
    • WPI-Zertifizierungen
    • KI-Weiterbildungen
  • Förderungen
    • Übersicht
    • Bildungsgutschein
    • Bildungsscheck
    • Berufsförderungsdienst der Bundeswehr
    • Berufliche Weiterbildung im Rahmen von Reha-Maßnahmen
    • Qualifizierungschancengesetz
    • Unterstützung vom Arbeitgeber
    • Bildungsurlaub
    • Steuern sparen
    • Geförderte Weiterbildung in Kurzarbeit
    • Qualifizierungsgeld
  • Blog
  • Über uns
    • Profil & Leitbild
    • Tutoren
    • Kundenstimmen
    • Unsere Zertifizierungen
    • Wir suchen – Stellenangebote
    • Kooperationspartner
SEHR GUT 5.0 / 5.0 (52)

Mein erstes Rails-Gem: Ein möglicher Fix für das Massassignment-Problem in Rails

Christian Eichhorn

Montag, 02. April 2012 um 17:12 von Christian Eichhorn in Webentwicklung

Ich muss mich erstmal kurz vorstellen: ich bin einer der Entwickler hinter der IT-Infrastruktur, die ihr als Fernstudenten und Präsenzteilnehmer hier tagtäglich nutzt; wenn etwas mal nicht funktioniert (selten), oder der Kunde sagt: "genauso, wie ihr das anbietet, will ich das, bloß ein bisschen anders!" (schon ein wenig häufiger), dann heißt es immer: "Christian!!!!". Manche Fernstudenten kennen mich auch schon aus dem Onlinecampus.

Zur Sache: Ich habe gerade mein erstes Rails-Gem veröffentlicht. Ein Gem ist eine kleine Erweiterung, um eine Ruby- bzw. Rails-Applikation um bestimmte Funktionen zu erweitern.

Der Hintergrund: unter bestimmten Bedingungen können in sich Anwender in Rails-Anwendungen wie unserer hier Admin-Rechte erschleichen, und das will man natürlich nicht. In der Rails-Gemeinde hat es da in letzter Zeit ein wenig Aufregung deshalb gegeben. Ich habe mir das Problem angesehen und eine Lösung dafür gefunden, die gut funktioniert, zumindest für uns; hier ist sie.

Also, ab jetzt bitte nur Rails-Entwickler weiterlesen; alle anderen kriegen sonst, glaube ich, glasige Augen...

Da die Daten-Objekte in einer Rails-Applikation im Front- und im Backend verwendet werden, ist es schwierig, die Attribute über die Modelle zu schützen.

Kurze Problem-Beschreibung:

Mittels record.update_attributes(params[:record]) ist es möglich, die Attribute des records aus einem Formular zu aktualisieren. Dadurch ist es aber auch möglich, dass ein verändertes Formular im Browser andere Attribute setzt als die, die vom Entwickler gedacht waren.

Beispiel:

Um einen User als Admin zu markieren, genügt es das Attribute admin auf true zu setzen (User ist ein Admin!).

Fügt nun ein User in seinem Profil-Formular im Browser durch diverse Tools ein Formular-Feld hinzu

<input type="hidden" value="1" name="user[admin]" id="user_admin">

und im Controller wird folgender Ruby-Code verarbeitet

# Code zum Auslesen des Users aus der Datenbank
user.update_attributes(params[:user])
# Code zum Rendern der Anzeige

ist es möglich sich Admin-Rechte zu erschleichen!

Mögliche Lösung:

Das Formular übermittelt der Controller-Action, welche Attribute erlaubt sind. Hierfür wurde folgendes GEM entwickelt: massassignment_security_form

Hierdurch werden die form_helper in Rails erweitert. Das Formular übermittelt dem Controller, welche Attribute erlaubt waren:

<% form_tag({:action => "update"}) do %>
  <%= error_messages_for :user %>

  <table>
    <tr>
      <td><label for="user_title">Title:</label></td>
      <td><%= text_field :user, :title %></td>
    </tr>
    <tr>
      <td><label for="user_first_name">Vorname:</label></td>
      <td><%= text_field :user, :first_name %></td>
    </tr>
    <tr>
      <td><label for="user_name">Name:</label></td>
      <td><%= text_field :user, :name %></td>
    </tr>
    <tr>
      <td colspan="2">
        <%= submit_tag 'Speichern' %>
      </td>
    </tr>
  </table>
<% end %>

Hierdurch wird folgendes Formular in HTML erzeugt:

<form method="post" action="/route/to/users/update">
  <table>
    <tr>
      <td><label for="user_title">Titel:</label></td>
      <td><input type="text" value="" size="30" name="user[title]" id="user_title"></td>
    </tr>
    <tr>
      <td><label for="user_first_name">Vorname:</label></td>
      <td><input type="text" value="Christian" size="30" name="user[first_name]" id="user_first_name"></td>
    </tr>
    <tr>
      <td><label for="user_name">Name:</label></td>
      <td><input type="text" value="Eichhorn" size="30" name="user[name]" id="user_name"></td>
    </tr>
    <tr>
      <td>
        <input type="submit" value="Speichern" name="commit">
      </td>
    </tr>
  </table>

  <input type="hidden" value="VerschluesselterHashMitDenAttributenFuerDenUser" name="massassignment_fields">
</form>

Die erlaubten Attribute im Formular werden im Hidden-Field (massassignment_fields) verschlüsselt hinterlegt und beim Absenden übertragen!

Nach dem Absenden sorgt ein before-Filter dafür, dass nur die Attribute in params[:user] erhalten bleiben, die in diesem Formular erlaubt sind.

Das Formular kann zwar im Browser manupuliert werden, aber es werden nur noch die vorher definierten Attribute übernommen.

Wenn der verschlüsselte Hash nicht verarbeitet werden kann, werden keine Attribute aus dem Formular übernommen!

In der README wird erklärt, wie Ihr das Gem bei Euch nutzen könnt!

Tags: Ruby , Rails , Massassignment fix

Twittern Empfehlen Xing

Kommentare

Hinterlasse einen Kommentar:

:*

(notwendig)

:*

(notwendig, wird nicht angezeigt)

:*

(E-Mail wiederholen)

:

(optional, Spam und Werbe-Links werden gelöscht)

:*

*

Blog abonnieren

Kategorien

  • Webentwicklung
  • Aktuelles
  • Webdesign
  • Web-Administration
  • SEO & SEM
  • Arbeitsmarkt und Karriere
  • Dies und das
  • Fördermöglichkeiten
  • Fernstudium und Selbstorganisation
  • An der Kaffeemaschine
  • Lernen und Arbeiten
  • News

Autoren

  • Thorsten Schneider
  • Frank Schad
  • Ulrike Walter
  • Christian Eichhorn
  • Marco Emrich
  • Michael Rohrlich
  • Robert von Heeren
  • Eleonore Schelling
  • Niclas Kahlmeier
  • Stefan Wölfel

Neue Kommentare

Rechtliche Aspekte bei der Verwendung von KI-Systemen in Unternehmen
  • Stephane Wietzel

    Der Artikel gibt einen umfassenden Überblick über die rechtlichen Herausforderungen beim Einsatz…


Webmasters Fernakademie wünscht frohe Weihnachten!
  • Charifi Salah

    Frohe Weihnachten und alles gute für 2023

  • Stefan Wölfel

    Vielen Dank, Charafi, auch Dir alles Gute für 2023.

Feed-Abo

Kommentare als RSS

Blog

  • Blog-Info
  • Blog-Regeln
  • Kontakt

  • +49 (0)911 49 52 23-0
    (Mo–Do: 9–17 Uhr und Fr: 9–13 Uhr)
  • Kontaktformular
  • Widerrufsrecht
  • Fernunterrichtsvertrag kündigen
  • Akademie

  • Impressum
  • Datenschutz
  • Verbraucherinformationen
  • Newsletter
  • Cookie-Einstellungen bearbeiten
  • Folgen Sie uns

  • Facebook
  • LinkedIn
  • Xing