Railsのセキュリティ」というテーマでお話することになりました。Webアプリケーションセキュリティフォーラムというわけで、発表して来た。スライド(PDF)スライド原稿(RD)自分の発表はともかく興味深い話を色々聞けてよかった。奥さんと高木先生のバトルが面白かった。追記:リクエストがあったのでバトルの内容について少し。(曖昧な記憶に基づく再現で言い回しは違うと思うし、内容にも私の勘違いがあるかもしれません。念のため)高木先生Greasemonkeyの説明の部分がよく聞こえなかったんですが。奥さん(内容を説明)高木先生ええと、「クッキーが漏洩する程度なので問題ない」と聞こえたような気がしたんですが。私の心の声(最初から聞こえてたんじゃ...)奥さんローカルファイルにアクセスできたり、任意のコマンドを実行されたりするのに比べれば、ということですね。高木先生いや、それは違うと思うんですよ。銀行サイトのクッキーが漏洩したら非常に危険ですよね。同じことをトロイの木馬などで実現するのは相当コストがかかると思うんですが、Greasemonkeyスクリプトでは簡単に実現してしまうわけで、非常に危険だと思います。奥さんスクリプトを有効にするドメインを指定できますので、ある程度対策は可能です。私はGreasemonkeyスクリプトのようなものは、スクリプトの内容が読める人が使うものだと思っています。他にも、JSONPの脆弱性の対策手法は汚いと思うがそもそもJSONPみたいなもが必要なんですか?とか、全ユーザのトラッキングじゃなくて視聴率調査みたいに了解を取った上で何%かのユーザを対象に調査すればいいんじゃないですか?とか、IPアドレスによるトラッキングなんて本当にできるんですかとか?とか面白い応酬が続いていた。おおざっぱに議論をまとめると、セキュリティと利便性のトレードオフの話ということになるのかな?さらに追記:すみません、やっぱり記憶違いがあったようです。高木先生からのツッコミを引用します。いう話をしたのでした。Objectsの読書会。いっても、Aさんとまつもとさんと私の3人だけだけど。Languages"までAさんに解説してもらったけど、Reviewまでは何とかついていけそう。I以降は式ばっかりでコードが出て来ないのでつらそうだな。covariance/contravariance/invarianceについて、ある型についてgetのみだったらcovariancesetのみだったらcontravarianceget/set両方あったらinvarianceという整理はすっきりしていると思った。メソッドの場合は、戻り値についてはcovarianceを、引数についてはcontravarianceを適用する(つまりSather方式)のが、型システムの安全性を考えると一番自然である。あとで思い出したけど、Javaの配列型はget/set両方あるのにcovariantなので(本当はinvariantであるべき)型安全性が破綻しているんだな。配列型で型安全性が破綻していること自体はずっと前に気付いてたんだけど、理論的に整理されてすっきりした。supertypeであるためには...と考えてたんだけど。type)に一般化すると、ある型パラメタについて、型パラメタがgetにしか使われない(メソッドの戻り値にしか現れない)ならcovariant、setにしか使われない(メソッドの引数(正確にはin引数)にしか現れない)ならcontravariant、get/set両方ならinvariantであるべきということなんじゃないだろうか。Reviewをざっと眺めたところではそういう話はなかったけど、後の方で出て来るのかな。実際にはinvariantな言語が多い気がするけど、そういう言語ってあったっけ。あと、Betaのinner(superの逆)も面白そう。CLOSのメソッドコンビネーションのaroundみたいな使い方になるらしい。単一継承だと(mixinできないので)設計が難しそうだな。何はともあれ、今回の勉強会が今までの勉強会で一番ラボっぽかった気がする。次回は7/24(火)なので参加したい人がいたら私に連絡ください。ついてくのはしんどいと思いますが。いう言語ってあったっけ。Genericsでは型のユーザがvarianceを指定できるようになっています。typeもサポートしているそうですね。Tという形で記述することによって、covariantな型になります。NGなるほど、面白い。コンパイル時にエラーになるんですね。Number>がList<Number>とcompatibleでない(null以外のaddができないので当然)のが、使い勝手的にどうなんだろう。Number>を要求するようなインタフェイスにするというスタイルでコーディングすれば、List<Integer>を渡せるわけだけど、そういう書き方は一般的なのかなあ。