Liz's Blog

17道上課筆記#4:Strong Parameter

| Comments

關於Strong Parameter的緣起,可以參考Xdite寫的這兩篇文章:

  1. 從 Github 被 hack,談 Rails 的安全性( mass-assignment )
  2. Rails 101 S:[延伸閱讀] Strong Parameters

strong parameter 是什麼?

一般使用者create一筆資料後,在Rails本來的設定裡controller會直接和資料庫溝通,之後controller執行create action,就可以在瀏覽器中看到create的資料。但這樣一來就會暴露出資料庫設計,因此後來Rails改成只有規定範圍內的變數才能夠被接受。

為什麼我們要用 strong parameter?

為了資訊安全,讓controller只接受規定範圍內的欄位通過,避免亂猜的參數亂入。如:一般使用者可假設「判斷是否為admin」的表格可能是is_admin,試著送出{ :is_admin => true },看會不會真的變成admin,為了防堵這樣的情形,controller只接受白名單的欄位通過。

如何使用 strong parameter?

如:(Rails101)params只允許group資料表的title和description通過

def group_params
  params.require(:group).permit(:title, :description)
end

(Rails EC第一週課程)params只允許product資料表中title、description、quantity和price通過)

def product_params
  params.require(:product).permit(:title, :description, :quantity, :price)
end

【17道上課筆記系列】

  1. 17道上課筆記#1:整理撰寫 SEO 原則
  2. 17道上課筆記#2:User Story
  3. 17道上課筆記#3:列出五條 Yahoo Frontend Best Performance 最佳實務
  4. 17道上課筆記#4:Strong Parameter
  5. 17道上課筆記#5:如何讓 strong_parameter 接受 nested_attributes
  6. 17道上課筆記#6:before_action 的使用時機
  7. 17道上課筆記#7:session 與 cookie 的差別
  8. 17道上課筆記#8:為何我們要用狀態機去設計訂單狀態?
  9. 17道上課筆記#9:has_one v.s. has_many
  10. 17道上課筆記#10:render 與 redirect_to 的差異
  11. 17道上課筆記#11:routing 的 namespace
  12. 17道上課筆記#12:Callbacks
  13. 17道上課筆記#13:Service Object
  14. 17道上課筆記#14:Inheritance繼承
  15. 17道上課筆記#15:為什麼 Rails 要分production、test、development三種環境
  16. 17道上課筆記#16:什麼時機要用 helper?什麼時機要用 partial?

Comments

comments powered by Disqus