質問: ### 前提・実現したいこと 現在Sinatraを使ってブログ記事の投稿画面を作っています。 内容はシンプルなもので、formからタイトルや本文などを受け取ってDBに保存・表示するというものです。 ログイン機能などもなく、もし完成して使えるようになったとしても投稿ページはローカルからのみのアクセスにしようと考えています。 ### 発生している問題・エラーメッセージ 自分はSinatraの前にRailsを勉強していたのですが、Railsではformからの投稿を受け取る際にstrong parametersを使っていましたが、Sinatraでも同じようにstrong parametersを使う必要はあるでしょうか? 検索してもsinatraでstrong parametersを使った実装などの情報が全然なかったので、もし必要な場合どんな感じにやるのが良いのかも教えて頂けたら嬉しいです。
回答: StrongParameterはあるRails(ActiveModel)の便利機能が webの特性とあいまって脆弱性となってしまうために使われる回避策です。 そのため * ActiveModelを用いていない * ActiveModelの便利機能と同等の機能を実装していない ならば気にする必要はありません。 問題となる機能は、モデルのイニシャライザにパラメーターからなるハッシュを入れると ハッシュを展開してインスタンスを作る機能です。 ようは、下記2行が同等になるという機能です。 ``` Post.new(title: params[:title], content: params[:content]) Post.new(params) ``` ところが 例えば`Post`モデルに必須ではない要素として全体公開フラグ(`push_all`)があり 権限持ちのみが利用できたとき、 後者では、脆弱性を用いて権限がない人でも全体公開ができてしまいます。 webの特性上`params`に製作者が意図しないパラメーターを入れることは簡単です。 (user.jsやbookmarklet、あるいは開発者コンソールなどで)