2016-08-12 7 views
0

Einfache Blog app in Rails/Rethinkdb/nobrainer gemRails 5 und RethinkDB Fehler beim Speichern der Daten

Modell

class Post 
include NoBrainer::Document 
include NoBrainer::Document::Timestamps 
field :title, :type => String 
field :body, :type => Text 

Controller

def post_params 
    params.require(:post).permit(:title, :body) 
end 

funktioniert mit Rails 4 gleiche in Rails 5 Fehler :

Eine Idee?

To assign attributes, please pass a hash instead of `ActionController::Parameters' 

Antwort

0

Dies ist ein Problem mit NoBrainer. Es wurde bereits in der aktuellen Version von git HEAD behoben und wird in der nächsten Update-Version enthalten sein.

Nicht einfach Strong Parameter umgehen, indem post_params auf einen Hash Umwandlung, wie zuvor vorgeschlagen; Dies ermöglicht es jedem Benutzer, beliebige Formularfelder einzureichen, und Ihre Bewerbung akzeptiert diese blind. Dies ist ein riesiges Sicherheitsproblem, da jeder Angreifer nun beliebige Spaltendaten (wie zB "is_admin = 1") übergeben kann und Ihre App sie ohne Bedenken annimmt.

Wenn Sie jemals Parameter in einen Hash konvertieren, treffen Sie die falsche Entscheidung. Sie sollten nie rohe Params in ein Modell von einem Controller übergeben. Strong Parameters schützt Sie. Wenn die weißen Listen permit und nicht funktionieren, ist Rails oder Ihr ORM defekt. Stoppen Sie, finden Sie heraus, welches gebrochen ist, und melden Sie es dem entsprechenden Projekt.

+0

Danke..zur Befestigung .. – Werner

0

Nach der Fehlermeldung To assign attributes, please pass a hash instead of 'ActionController::Parameters' Ich gehe davon aus irgendwo in Ihrer Anwendung habe einen Code:

Post.create(post_params) 

Konvertieren zu einem Hash mit der to_h Methode:

Post.create(post_params.to_h) 
+0

Vielen Dank .. great..works .. – Werner

+0

Nooo! Während dies das Problem "löst", macht es Strong Parameters völlig nutzlos und führt zu einer großen Sicherheitslücke. – colinm

+0

@colinm Gibt es hier einen rohen params? 'post_params' ist _permitted_params_ und nur zwei Schlüssel erlaubt' title' und 'body' und nur zwei Schlüssel, die an die create-Methode übergeben werden. Gründlich durchlesen. –

Verwandte Themen