Rails4のStrong Parametersはなぜブラックリストではないのか?

photo credit: Andrew* via photopin cc

切欠

タイトルについて思った切欠は、Rails4のあるサービスに対してパラメーターを追加するPull Requestを送った。そのサービスはStrong Parameterを使用していたが、自分もレビューアもそこにパラメーターを追加していないことに気付かず、マージされた。その後、QA環境にデプロイされ、手動テストでStrong Parametersの対応が入っていないことがわかった(この時は手動テストをしている人がStrong Parametersの対応をControllerに追加するだけで対応を完了させてしまった)。

Strong Parametersの挙動は

  • 設定していない場合:フルオープン(何でも更新可能)更新できない
  • 設定している場合:許可した項目のみ変更可能、そのため項目を追加していく度に定義を追加する必要がある

Strong Parametersで制御したい(=更新させない)項目は基本的に少ないはずなのに、どうしてこんな仕様なのだろうか?と思って、ぐぐったところ、

Blacklisting attributes would be a security issue, since your codebase can evolve, and other attributes, which should be blacklisted can be forgotten in the future.
Adding all your whitelisted attributes might seem like a complicated thing when implementing it.
However, it’s the only way of keeping your application secure and avoiding disturbing things.
Stack Overflow

と書いてあるのだが、まったく理解できないのだが…。

2015/4/7 追記

@bash0C7さんから「mass assignment脆弱性対策だからホワイトリストという理解です」との指摘をいただきました。
github の mass assignment 脆弱性が突かれた件 – blog.sorah

また、「設定していない場合:フルオープン(何でも更新可能)」と記載していましたが、これがそもそも誤りで、更新できない状態が正しいです。

“Strong Parametersによって、すべての項目を更新できない状態にされておりそれをホワイトリストで更新できる状態にしている”、ということを理解しました。@bash0C7さんご指摘ありがとうございました。