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

9
前へ 1 ・・ 4 5 ・・ 54 次へ
Youhei Kondou @dw3w4at

@nappa ActiveRecord/Model は非Web画面からも使える部品なので、例えばバッチプログラムから直にこれらを呼ぶときは、そこが入力部分で全然"奥"ではないですよね。なんとかがきさんは ActiveRecord/Model を Web 以外で使う観点がゼロです。

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

@dw3w4at そうそう。それが Rails のうれしいところなんですよね。極力SQL文を叩かずに済ませられるのが。

2013-07-09 20:24:29
Youhei Kondou @dw3w4at

そこで、Rails 4 からは Controller に strong parameters という機能を登場させ、そこで mass assignment の制御を行うことに。それ以上でもそれ以下でもないです。

2013-07-09 20:24:45
Youhei Kondou @dw3w4at

繰り返しますが、 strong parameters は mass assignment の制御という「セキュリティ要件」のための機能であり、「妥当性検査」とは直交する概念です。

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

「多重のセキュリティ」っていいますけど、Model での validation に加えて Controller で似たようなロジックを書いて多重防御だと言うのなら同一インタプリタ上で動いてるだけなので、インタプリタの脆弱性を突かれたら終わりなような。

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

どうせ「多重防御」するなら Model で値の妥当性検査を作り、Strong Parameters も使う、っていうRails の流儀通りにひととおりやった上で、WAF(=別実装・別処理系)で防御するほうがよほどマシだと思います。Controller に何かを書くよりは。

2013-07-09 20:30:29
Youhei Kondou @dw3w4at

逆に ActiveRecord/Model での妥当性検査であり、かつ、それがセキュリティ対策と等価になる場面って、思いつく限りではとても少ないと思います。等価になる例は ActiveRecord/Model で Joe アカウントをはじく validate を実装するぐらい?

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

そういえばこのスライドの発表現場でツッコミが入らず、Rails 技術者認定試験の Facebook ページでシェアされ、そこにけっこう「いいね」がついちゃって、さらにシェアまでされてしまったという点について。……どうしたら良かったのでしょうね。

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

なるほど、妥当性検査とセキュリティ要件のための検査が自分のなかでけっこうあいまいだったことに気づきましたです。不正な値をDBに突っ込まれることを避けることを主に考えておりました。

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

技術的に正しいことを1つ広めるために、間違ったことが1つ広まってたら意味がないんじゃないですかー

2013-07-09 21:14:15
八木の野郎 @yagi_

あーそうか。validationがMVCのMからCへって程度の記述が何でそんなに話題なのかと思ったら @yohgaki@ockeghem はずっと前からいろいろやり合ってるんだ。端から見てると重箱の隅を突き合うように見えるけど、それこそがセキュリティってもんだからなあ

2013-07-09 21:24:34
四十雀太猿部3rdシーズン @ctrl_alt_deb

まあ、真に受ける人も少ないと思う。読んでつくりゃわかる

2013-07-09 21:26:41
四十雀太猿部3rdシーズン @ctrl_alt_deb

誤解は招くけど、よく読みゃ気づくでしょ、普通

2013-07-09 21:34:14
徳丸 浩 @ockeghem

ご指摘に同意します RT @dw3w4at: 逆に ActiveRecord/Model での妥当性検査であり、かつ、それがセキュリティ対策と等価になる場面って、思いつく限りではとても少ないと思います。等価になる例は ActiveRecord/Model で Joe アカウント…

2013-07-09 21:36:28
徳丸 浩 @ockeghem

その後のやり取りを追加しました 「Rails4のStrong Parametersはコントローラに置かれたバリデータなのか?」 http://t.co/Nsvv2SB1xH

2013-07-09 21:39:41
nouvellelune @nouvellelune

うーん、またこの人か…。しかし徳丸先生は相変わらず紳士だな | Rails4のStrong Parametersはコントローラに置かれたバリデータなのか? http://t.co/y2aUqOilHG

2013-07-09 21:49:15
徳丸 浩 @ockeghem

あります。せめてandですが、使わない方がよいかとw RT @shigecchi2007: 前にパクりたいなぁと思ったことがありましたがリスクあるんですね RT @ockeghem: 私のメールアドレス 'or'1'='1'--@ tokumaru. org をバリデーションで…

2013-07-09 22:04:21
徳丸 浩 @ockeghem

それはありですが、どうやって判定しますか? SQLインジェクションになるパターンは様々ですが… RT @stlmix: RFCに準拠していようが、SQLインジェクション誘発メールアドレスなんて弾いてしまえばいい。困るのは徳丸っていう人一人だけでしょ。

2013-07-09 22:56:55
徳丸 浩 @ockeghem

@ujichan_ujihara そうですね。メールにシングルクォート使う人は確かにマレなので、切るという判断もありかと思います。それにしても、SQLインジェクション攻撃可能なメールアドレスをGoogleが平然と受け入れるのは感動すら覚えますね

2013-07-09 23:15:40
Youhei Kondou @dw3w4at

@ockeghem あとパスワード単体での強度が足りなくてはじく(n文字未満、aaaaや1234とか)のも、Modelでの妥当性検査かつセキュリティ要件になるケースでしょうか。これをActiveRecordで実装するか外部ライブラリを再利用するかは別の話題になってしまいますが。

2013-07-10 06:20:31
徳丸 浩 @ockeghem

はい。ただ、これは単に要件のチェックと見ればいいと思います。「対策」ではない RT @dw3w4at: @ockeghem あとパスワード単体での強度が足りなくてはじく(n文字未満、aaaaや1234とか)のも、Modelでの妥当性検査かつセキュリティ要件になるケースでしょうか…

2013-07-10 09:15:30
徳丸 浩 @ockeghem

確かに、解せない感じですね RT @foo_is_bar: @ockeghem google Appsのユーザやグループのメールアドレスとしては指定出来ませんね。=が使えないようです。差があるのが不思議ですね。

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

@yagi_ Strong Parametersは多くのWebアプリの開発を楽にする、という意味では結構良いし、入力パラメータをコントローラで処理すればsave前でも使って構わない。Rails4で頑張ってモデルで、でも構わないのですがRailsの新流儀に反した作り方ですね。

2013-07-10 12:02:04
山崎良祐 / Ryosuke Yamazaki @nappa

うーん? うーん?? 何を言ってるんだ、よくわかんないぞ……

2013-07-10 16:08:38
山崎良祐 / Ryosuke Yamazaki @nappa

Rails の新流儀って何のことですか

2013-07-10 16:09:58
前へ 1 ・・ 4 5 ・・ 54 次へ