忍者ブログ
ブログツール、2007/11/06作成
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

OSC Hokkaidoのその2。

Ruby札幌の発表です。

いつも通りしまださんの歯切れのいいトークでスタート。

Rubykaigi2008の報告から始まって、jpmobileプラグインの解説。

Rubykaigi2008の報告は写真盛りだくさんで楽しかった。
来年は是非行ってみたいと思いました。

で、目玉のjpmobileプラグインの説明。

Rubykaigi2008で行った発表そのままだそうで、
わかりやすいし、いいプレゼンでした。

ちょうど、作成しているMediGateシステムの携帯版で、
MobileOnRailsにしようかJpmobileにしようか迷っていたところだったので、
いいタイミングです。

Jpmobileは制作者のDaraさんが札幌の人だと知り、
おお!こんなすごい人が札幌にいるとは~とちょっと感動。

機能的にも充実しているし、なんといってもエンコードの動的変更が可能な点がすばらしい!!
ということで、採用決定です。

いや~こういう集まりはもっと出ないとね。
とすごく思いました。
いや~勉強になる。

daraさんのブログ
http://d.hatena.ne.jp/darashi/20061029/1162156059
PR
OSC Hokkaidoに行ってきました。
Ruby札幌の主催でRubyOnRailsのセキュリティハンズオンと、Ruby札幌の発表の両方。

セキュリティハンズオンの方は、
会場に設置されているPCを利用して、
デモ用のRailsアプリから脆弱性を発見するというもの。

PC持ち込み可とのことだったんで、ノートを持って行ったけど、
会場の都合で利用不可。

Ruby札幌の皆さんが備え付けのPCにサーバーをたててデモアプリを動かす予定が、
これも会場の都合で無理だったようです。
持ち込みノートにアプリを用意して、Telnetでログインして利用しました。

僕もこの会場を使ったことがあったけど、
ちょっと難しいことをしようとすると全くだめです。

で、ハンズオンは脆弱性発見組とRailsの基礎編の二組に分かれましたが、
脆弱性発見組は僕を含め二人だけ。

もっといるかと思ったけど、ほとんどの人がRails基礎編でした。

初めてすぐXSSとCSRF脆弱性は発見できました。
それから、本来さらされていないshowメソッドが叩けたので、
それを叩くと隠してあったsecurity属性が表示できました。

で、それをテキストエリアから属性をいじってみるも特に何もなく。
ソースをみてみようとTelnet端末から開いてみるも、
なにせviの使えないへぼプログラマなのでソースの詳細はいじれず。

で、検索窓があるので、当然のようにSQLインジェクションを試すとできそうな予感。
SQLインジェクションでどこまでできるか試しているうちに時間切れとなりました。

どんな感じでやるのか、いまいち感じがつかめてなかったので、
もたもたしちゃいましたが、こんなことなら予習しておけばよかったとちょっと後悔。

でも、なかなか自分で作ったアプリでこんなことしないので、
すごく勉強になりました。

まとめでセキュリティについての気をつけるべきポイントや、
いいツール、プラグインなども教えてもらえてすごく幸せ。

もっと勉強会とか出ないとだめですね。
久々にRailsじゃないCGIプログラムを書くといろいろ勉強になるけど、ひどくハマる。
レンタルサーバーがRails対応じゃないから仕方ないけど。

で、今回のどハマりはマルチパート。

日記みたいなかんじのCGIなんだけど、
画像ファイルをアップロードさせてサーバーのディレクトリに保存、エントリ投稿時にディレクトリのファイルを選択して貼り付ける言う、それほど難しくもないもの。

デザインと分離したいので、rhtmlが使いたかった所だけど、それがサーバーの都合で出来ない。
頻繁に書き換えるわけでもないので、投稿データはYAMLで保存しておき、
テンプレートとしてデザイナーに作ってもらったファイルの一部を書き換えることで、
HTMLファイルを再構築して出力するようにした。

根本的な機能はrbファイルで作成して、入出力をcgiに持たせる方向で行く。
そうすれば、CGIから作らなければならないページは管理用のページだけになる。

管理用ページはCGI::HtmlExtentionを使って、出力する。

で、はまったのは、マルチパートフォームで画像をアップしたとき。
1.マルチパートで送ったときは、同一フォーム上のパラメータは全部StringIOできちゃうこと。
これはすぐわかった。
CGI.multipart?で処理を分岐してパラメータの取得をおこなって終了。

2.なぜかcgi.outのところでエラーが返る。
cgi.rb 'read_multipart' : no content body {EOFError)
ときたもんだ。

マルチパートの処理は正常に終わってるし、サーバーにも意図通りファイルが保存されている。
何だ何だー?
と調べてみると、CGI.newが再度呼ばれているところが原因。

どういうことかというと、
ページ全体の設定だとか、エントリの編集部分だとか、画像の選択フォームだとかの定型的なものはどうしても繰り返し書いてしまいがちなので、ここは一つDRYにするために、出力部分のヘルパを作ってみた。

特に何も考えず、どうせCGI::HtmlExtentionで出力された文字列をあいだにはめるだけだから、とヘルパにはクラスメソッドのみしか定義せず、出力に必要なオブジェクトのみを引数にして、メソッドが呼ばれるたびにCGI.newしていた。
この部分だ。

うへー。と思いつつ、クラスメソッドにするのをやめて、initializeで呼び出し元のCGIインスタンスを引き回すことにする。

CGI::HtmlExtentionがクラスメソッドじゃないのには理由があるんだねえ。
クラスメソッドじゃないものをクラスメソッドの用に使い回すのにインスタンスを作りまくるのはやっぱ問題があるんだねえ....

CGI::HtmlExtentionでどうしてクラスメソッドじゃないのかは調べる気力がないのでここで終了。

教訓
ヘルパ作るなら、CGIインスタンスを使い回せ。
無駄にnewすんな。
そこにシビれる、あこがれるゥ!! な配列のシャッフルの仕方。

array.sort_by{rand}

すてきすぐる。

元ネタはここ
ついめ~じ
ブログ内検索
フリーエリア
サニーカメラ
Powered by Ninja Blog    template by Temp* factory    icon by MiniaureType

忍者ブログ [PR]