2016-08-12 6 views
0

シンプルなブログアプリ/ nobrainer宝石レール5とRethinkDBエラーデータを記憶するのRails/Rethinkdbで

モデル

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

コントローラ

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

はRailsの5エラーでRailsの同じ4と正常に動作します:

いくつかのアイデア??

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

答えて

0

これが問題ですNoBrainerと一緒に。現在のgit HEADリリースではすでに修正されており、次のアップデートリリースに含まれます。

は、前述のようにpost_paramsをハッシュに変換することにより、強いパラメータを単純にバイパスしません。これにより、任意のフォームフィールドを任意のユーザーが送信できるようになり、アプリケーションはそれを盲目的に受け入れます。攻撃者は任意の列データ(たとえば "is_admin = 1"など)を渡すことができるため、これは巨大なセキュリティ上の問題です。アプリは喜んで喜んで受け入れます。

パラメータをハッシュに変換すると、間違った決定が行われます。コントローラからモデルに生のパラメータを渡すべきではありません。強力なパラメーターはあなたを守るためのものです。 permitrequireホワイトリストが機能しない場合は、RailsまたはORMが壊れています。停止し、どれが壊れているかを把握し、適切なプロジェクトに報告します。

+0

ありがとうございます。 – Werner

0

あなたのエラーメッセージTo assign attributes, please pass a hash instead of 'ActionController::Parameters'によると、私は、コードを持ってどこかに自分のアプリで前提としています

Post.create(post_params) 

to_h方法でハッシュに変換:

Post.create(post_params.to_h) 
+0

ありがとうございます。素晴らしい作品です。 – Werner

+0

Nooo!これは問題を "解決"しますが、強力なパラメータは完全に役に立たず、巨大なセキュリティ上の欠陥をもたらします。 – colinm

+0

@コリンここに生のパラメータがありますか? 'post_params'それはparams_であり、' title'と 'body'を許すのは2つのキーだけで、2つのキーだけがcreateメソッドに渡されます。慎重に読む。 –

関連する問題