2016-08-12 67 views
0

簡單的博客應用程序/ nobrainer寶石導軌5和RethinkDB錯誤存儲數據在軌道/ 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 

正常工作與導軌4相同的在導軌5錯誤:

一些想法??

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

回答

0

這是一個問題與NoBrainer。它已在當前的git HEAD版本中得到修復,並將包含在下一個更新版本中。

不要簡單地通過將post_params轉換爲散列,像前面建議的那樣繞過強參數;這將允許任何用戶提交他們希望的任何表單字段,並且您的應用程序將盲目地接受它。這是一個巨大的安全問題,因爲任何攻擊者現在都可以傳遞任意列數據(例如,「is_admin = 1」),並且您的應用將毫不猶豫地接受它們。

如果您曾經將參數轉換爲哈希值,那麼您做出了錯誤的決定。你永遠不應該從控制器傳遞原始參數到模型中。強有力的參數是爲了保護你。如果permitrequire白名單不起作用,則Rails或您的ORM被破壞。停下來,找出哪一個壞了,並將其報告給適當的項目。

+0

Thanks..for修復.. – 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

@colinm這裏有一個原始參數嗎? 'post_params'它是允許的params_,只有兩個鍵允許'title'和'body',只有兩個鍵傳遞給create方法。仔細讀。 –