Output Diary

プログラミング × 読書 のアウトプットを発信しています

【Rails】ストロングパラメーターとは何なのか

f:id:kina_kq:20210517132635j:plain

 

ストロングパラメータの仕組みをあまり理解していなかったので、

今日は調べたものをまとめていきたいと思います。

 

今日のゴール

 

・ストロングパラメータを理解する

・paramsとpermitの役割を理解する

 

ストロングパラメータ

 

ストロングパラメータは、

「Webから入力された値を制限することで、不正なアクセスからWebサービスを守る」

といった役割をしています。

 

例として以下のbook_paramsがあったとします。

f:id:kina_kq:20210517132809p:plain

 

ここでは、まず、

1. 送られれてきたデータが安全かどうかを確かめ、

require(:book)の部分で絞り込んでいます。

 

その次に、

絞り込んだbookの情報のうち、受け取る値をキー名で指定しています。

permit(:title, :learn, :about, :category)の部分に当たります。

 

 

あれー????なぜキーまで取得するのか?

require(:book)の部分があれば良いんじゃないかな?

と疑問に思った人もいると思います。

 

require(:book)の部分でカバー出来ているのにいらなくねーっと。

 

なぜpermit(:カラム名1, カラム名2, ・・・)と書いて、

受け取る値を指定するのか??

 

なぜなら、

もしuser_idカラムを足して「どのユーザーがどの投稿をしたか」という情報を、

テーブルに保存していき、user_idのような情報までユーザーから受け取るようにしてしまうと、なりすましやデータの改ざんが可能になってしまうからです。

 

あれー?見に覚えのない投稿が、、。

もしかして乗っ取られてる、、?

といった状態になってしまう危険性があります。

 

そのためにpermitというメソッドを使って受け取る情報を限定する必要があるのです。

 

まとめ

 

ストロングパラメータは、

本当に必要なデータだけ絞り込んで、不正なパラメータを防ぐ役割をしている

 

参考

api.rubyonrails.org

qiita.com