Rails4 の Strong Parameters とバリデーション論争私的まとめ

9
前へ 1 ・・ 3 4 ・・ 54 次へ
Kousuke Ebihara💉💉 💉 💉 @co3k

徳丸さんに迷惑がかからないようにとりあえず 'or'1'='1'-- というローカルパートを決めうちで弾くのをデファクトにしていくとよいのでは(多重防御)

2013-07-09 17:59:41
Yasuo Ohgaki (大垣靖男) @yohgaki

@yousukezan バクってるのでは無くAPIの仕様により残念な事になってる、という事ですね。週末に解説のブログを書く事にしますが、Railsの開発者はDOAに置いているのでこうなっているのだと思います。

2013-07-09 18:34:03
rryu🐋 @rryu2010

バリデーションを「入力値がvalidかどうかを判定し、判定結果を使ってinvalidな時の処理をおこなうことができるもの」とすると、strong parameterはバリデーションではないなあ。 / “Rails4のStrong …” http://t.co/XzhSD4GMKk

2013-07-09 18:43:03
しいたけ @yuroyoro

「ControllerでvalidationなぞMVCのなんたるかをわかっちょらんッ!!」というマサカリで延焼しそう | Rails4のStrong Parametersはコントローラに置かれたバリデータなのか? - Togetter http://t.co/xU7SvWBtqb

2013-07-09 18:48:27
徳丸 浩 @ockeghem

たいーほされるかもしれませんよ(>_<) RT @crosslaboratory: @crosslaboratory: @ockeghem 人様のサービスに支障を及ぼした場合、やはり責任を問われるのでしょうか?(^^;;

2013-07-09 19:14:24
Youhei Kondou @dw3w4at

いや、元のスライドのvalidationの説明が間違ってる時点でお前は何を言っているんだ https://t.co/vvLUIic9kK

2013-07-09 19:45:08
Youhei Kondou @dw3w4at

と思ったら、なんとかがきさんの脳内辞典にあるバリデーション/妥当性って単語が、そもそも人口に膾炙してるほうのバリデーション/妥当性って単語とまるで違っている説 http://t.co/K2DHEMzLrr 標準語と関西弁の「なおす」ぐらい違うのか…。

2013-07-09 19:52:57
リンク はてなダイアリー 大垣本を読んで「バリデーションはセキュリティ対策」について検討した - ockeghem(徳丸浩)の日記 このエントリでは、セキュリティの観点から、バリデーション実装について検討します。大垣さんの本を読んで..
山崎良祐 / Ryosuke Yamazaki @nappa

ActiveRecord/Model の validates* を信じてはいけない理由が解せない。理屈としては【そんな奥の方で妥当性検証をするのは正しくない、もっと手前段で検証するべきだ】ということなのだろうけど、十分に手前段だと思うけどなぁ。

2013-07-09 19:55:02
山崎良祐 / Ryosuke Yamazaki @nappa

Struts 1.x の FormBean のころは変更対象のデータが同一でも Form 毎に検証ロジックを用意する必要があったし、Form でない入力(CSVとかXMLとか)も当然、別の検証ロジックを用意する必要があった。継承や委譲でなんとか整理したけど限界はあった

2013-07-09 19:58:03
山崎良祐 / Ryosuke Yamazaki @nappa

その点 ActiveRecord/Model は単一の妥当性検証で済む。これのメリットはテストがしやすいこと、ロジックの確認をとりやすいところ、rails console からの手操作でも validation がかかること、などなど、いろいろあって、かなりイケてると思う

2013-07-09 20:00:04
山崎良祐 / Ryosuke Yamazaki @nappa

Mass Assignment 脆弱性が簡単なミスで起きやすいのが難点だったけど、それも Strong Parameters で解決したし、やっぱ ActiveRecord/Model 最強ですよ、と思う

2013-07-09 20:00:23
山崎良祐 / Ryosuke Yamazaki @nappa

ActiveRecord/Model で値の妥当性検証をするのは遅すぎる、もっと手前段で検証するべきだ、というなら、別のフレームワーク(たとえば Struts 1.x の FormBean)と比べてどれだけのリスクが増え、どれだけのリスクが軽減されているかを考えるべきだと思う

2013-07-09 20:01:34
Youhei Kondou @dw3w4at

validation って、あくまで作っているアプリケーションの要件・仕様を満たす(妥当性)か否かで、ミドルウェア/フレームワークの脆弱な部分をパテ埋めする(セキュリティ対策を施す)か否か、とは直交する概念(≒××、○×、×○、○○、いずれもあり)と考えます。

2013-07-09 20:01:48
山崎良祐 / Ryosuke Yamazaki @nappa

個人的な主観では Struts 1.x の FormBean に比べて Rails のほうがはるかに書きやすく、バグも少なく、テストもしやすく、複雑性が低い。リスクが減ったとしても増えたとはとても思えない。

2013-07-09 20:03:30
山崎良祐 / Ryosuke Yamazaki @nappa

仮に ActiveRecord, ActiveModel の validate* を信用せず、 Controller で値の妥当性検証を実装したとしても、通るコードの量的は大きな違いなんて無いはずなんですが (数えられるくらいの代入文とメソッド呼び出しが増えるだけで)

2013-07-09 20:05:24
まきのっぴ @pmakino

ブレないなあ… / “Rails4のStrong Parametersはコントローラに置かれたバリデータなのか? - Togetter” http://t.co/ySRLpyeGjp

2013-07-09 20:05:46
徳丸 浩 @ockeghem

@nappa 憶測ですが、コントロール=入力、モデル=処理という見立てで、処理に移る前の入力で検証しなければならない、という話ではないかと

2013-07-09 20:08:39
Youhei Kondou @dw3w4at

Rails 3 までは、mass assignment 対策は、Model に attr_accessible (更新してよいカラム名ホワイトリスト)または attr_protected (更新したくないカラム名ブラックリスト)を指定していました。あくまで妥当性検査とは別です。

2013-07-09 20:10:02
まきのっぴ @pmakino

「誤解を招き見当違いの実装を助長する有害な資料を何とかしろ」を丁寧にオブラートに包んだ表現を見た

2013-07-09 20:10:10
山崎良祐 / Ryosuke Yamazaki @nappa

Rails の Controller は MVC の Controller と完全に一致するものではないですし、Rails の Model と MVC の Model も完全に一致するものじゃないですし。そもそも MVC にキチキチに沿ったフレームワークでろくなのがない気が……

2013-07-09 20:13:04
山崎良祐 / Ryosuke Yamazaki @nappa

Rails 4.x の開発なら ActiveRecord, ActiveModel の validate* で値の妥当性検査をして、Controller で Strong Parameters を使い、必要に応じて WAF を入れればいいんじゃないでしょうか

2013-07-09 20:14:19
山崎良祐 / Ryosuke Yamazaki @nappa

WAF は Ruby のインタプリタそのものの脆弱性や、Rails の脆弱性(HTTP Requestを受け取ってからユーザが書いたコードへ渡る直前段までの箇所の脆弱性)や、未発見の脆弱性に備えたい人なら入れたほうがいいですね

2013-07-09 20:15:33
Youhei Kondou @dw3w4at

ところが昨年 http://t.co/yf2im4VLLd が起きたことで、「attr_accessible or attr_protected を殆どの人使ってなくね?」「そもそも入力場面毎に更新したいカラムが違うし Model で指定するのがおかしくね?」と見直しの機運が。

2013-07-09 20:16:36
リンク cve.mitre.org CVE - CVE-2012-2055 Common Vulnerabilities and Exposures (CVE®) is a dictionary of common names (i.e., CVE Identifiers) for publicly known information security vulnerabilities. CVE's common identifiers enable data exchange between security products and provide a baseline ind
前へ 1 ・・ 3 4 ・・ 54 次へ