@nappa ActiveRecord/Model は非Web画面からも使える部品なので、例えばバッチプログラムから直にこれらを呼ぶときは、そこが入力部分で全然"奥"ではないですよね。なんとかがきさんは ActiveRecord/Model を Web 以外で使う観点がゼロです。
2013-07-09 20:22:59@dw3w4at そうそう。それが Rails のうれしいところなんですよね。極力SQL文を叩かずに済ませられるのが。
2013-07-09 20:24:29そこで、Rails 4 からは Controller に strong parameters という機能を登場させ、そこで mass assignment の制御を行うことに。それ以上でもそれ以下でもないです。
2013-07-09 20:24:45繰り返しますが、 strong parameters は mass assignment の制御という「セキュリティ要件」のための機能であり、「妥当性検査」とは直交する概念です。
2013-07-09 20:26:44「多重のセキュリティ」っていいますけど、Model での validation に加えて Controller で似たようなロジックを書いて多重防御だと言うのなら同一インタプリタ上で動いてるだけなので、インタプリタの脆弱性を突かれたら終わりなような。
2013-07-09 20:28:44どうせ「多重防御」するなら Model で値の妥当性検査を作り、Strong Parameters も使う、っていうRails の流儀通りにひととおりやった上で、WAF(=別実装・別処理系)で防御するほうがよほどマシだと思います。Controller に何かを書くよりは。
2013-07-09 20:30:29逆に ActiveRecord/Model での妥当性検査であり、かつ、それがセキュリティ対策と等価になる場面って、思いつく限りではとても少ないと思います。等価になる例は ActiveRecord/Model で Joe アカウントをはじく validate を実装するぐらい?
2013-07-09 20:34:13そういえばこのスライドの発表現場でツッコミが入らず、Rails 技術者認定試験の Facebook ページでシェアされ、そこにけっこう「いいね」がついちゃって、さらにシェアまでされてしまったという点について。……どうしたら良かったのでしょうね。
2013-07-09 20:34:16なるほど、妥当性検査とセキュリティ要件のための検査が自分のなかでけっこうあいまいだったことに気づきましたです。不正な値をDBに突っ込まれることを避けることを主に考えておりました。
2013-07-09 20:38:45あーそうか。validationがMVCのMからCへって程度の記述が何でそんなに話題なのかと思ったら @yohgaki と @ockeghem はずっと前からいろいろやり合ってるんだ。端から見てると重箱の隅を突き合うように見えるけど、それこそがセキュリティってもんだからなあ
2013-07-09 21:24:34ご指摘に同意します RT @dw3w4at: 逆に ActiveRecord/Model での妥当性検査であり、かつ、それがセキュリティ対策と等価になる場面って、思いつく限りではとても少ないと思います。等価になる例は ActiveRecord/Model で Joe アカウント…
2013-07-09 21:36:28その後のやり取りを追加しました 「Rails4のStrong Parametersはコントローラに置かれたバリデータなのか?」 http://t.co/Nsvv2SB1xH
2013-07-09 21:39:41うーん、またこの人か…。しかし徳丸先生は相変わらず紳士だな | Rails4のStrong Parametersはコントローラに置かれたバリデータなのか? http://t.co/y2aUqOilHG
2013-07-09 21:49:15あります。せめてandですが、使わない方がよいかとw RT @shigecchi2007: 前にパクりたいなぁと思ったことがありましたがリスクあるんですね RT @ockeghem: 私のメールアドレス 'or'1'='1'--@ tokumaru. org をバリデーションで…
2013-07-09 22:04:21それはありですが、どうやって判定しますか? SQLインジェクションになるパターンは様々ですが… RT @stlmix: RFCに準拠していようが、SQLインジェクション誘発メールアドレスなんて弾いてしまえばいい。困るのは徳丸っていう人一人だけでしょ。
2013-07-09 22:56:55@ujichan_ujihara そうですね。メールにシングルクォート使う人は確かにマレなので、切るという判断もありかと思います。それにしても、SQLインジェクション攻撃可能なメールアドレスをGoogleが平然と受け入れるのは感動すら覚えますね
2013-07-09 23:15:40@ockeghem あとパスワード単体での強度が足りなくてはじく(n文字未満、aaaaや1234とか)のも、Modelでの妥当性検査かつセキュリティ要件になるケースでしょうか。これをActiveRecordで実装するか外部ライブラリを再利用するかは別の話題になってしまいますが。
2013-07-10 06:20:31はい。ただ、これは単に要件のチェックと見ればいいと思います。「対策」ではない RT @dw3w4at: @ockeghem あとパスワード単体での強度が足りなくてはじく(n文字未満、aaaaや1234とか)のも、Modelでの妥当性検査かつセキュリティ要件になるケースでしょうか…
2013-07-10 09:15:30確かに、解せない感じですね RT @foo_is_bar: @ockeghem google Appsのユーザやグループのメールアドレスとしては指定出来ませんね。=が使えないようです。差があるのが不思議ですね。
2013-07-10 09:59:11@yagi_ Strong Parametersは多くのWebアプリの開発を楽にする、という意味では結構良いし、入力パラメータをコントローラで処理すればsave前でも使って構わない。Rails4で頑張ってモデルで、でも構わないのですがRailsの新流儀に反した作り方ですね。
2013-07-10 12:02:04