忍者ブログ
ブログツール、2007/11/06作成
[5] [6] [7] [8] [9] [10] [11] [12] [13
×

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

OSC Hokkaidoに行ってきました。
Ruby札幌の主催でRubyOnRailsのセキュリティハンズオンと、Ruby札幌の発表の両方。

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

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

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

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

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

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

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

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

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

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

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

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

もっと勉強会とか出ないとだめですね。
PR
ActionHelperのsubmit_tagで値を渡す方法。

見た目の関係上で、submit_tagを二つ作って、たとえば「完了」「取り消し」とやりたいときがある。

普通にsubmit_tagを二つ作って、コントローラでどっちのボタンが押されたか判別してあげればいい。

このとき、どのsubmit_tagが押されたかは、params[:commit]で判別がつく。
どうしても日本人なので、ボタン表示は日本語にしたいが、
条件分岐コードに日本語が入るのはどうもね....
という向きには、
submit_tagのhtmlオプションの:nameを入れてやればいい。
:commitに入るべき値が:nameで指定したシンボルで参照できる。

こんな感じ

view

<% form_tag(:action=>'test') do %>
<%= submit_tag 'ほげ', :name=>'hoge' %>
 <%= submit_tag 'ふが', :name=>'fuga' %>
<% end %>

controller
 
def test
  if params[:hoge]
     # ほげを押された処理
  else
     # ふがを押された処理
   end
end
@ITで記事を見て、NetBeans6.1を試してみる。

これまではRadRailsのままだったので、いろいろと補完機能が使えなかったりで、
つまらない変数の打ち間違いなどが多かった。

で、NetBeansだけど、コード補完機能や変数のハイライトなどは秀逸。
サーバーの起動/停止はかなりわかりにくく、テスト時にサーバーを再起動なんかはコントロールの仕方がわからない。
画面もRadRailsとはかなりちがっているので、結構面食らうかも。

それほど悪くないので、しばらく使ってみることにする。

しかし、エディタのフォントをCurie Newにしていたので、セットしてみると日本語が□で表示されて読めなくなる。
MSゴシック嫌いなんだよねえ…
何とかならんかね。
あ~、やってしまいましたとも。

ありがちなハマり方。

booleanなカラムを:null=>falseで作りましたよ。
んでもって、それにfalseをいれましたとも。
そしたらsaveでキックされちゃいましたよ。

はは、booleanな属性にvalidates_presence_ofを適用したら、falseを入れられなくなるなんてね。
とほほ。

しばらく悩みました。

答えはくまの人の所に。

validates_presence_ofの評価は、blank?でやってるらしい。
で、false.blank?はtrueなので、
ARに怒られちゃうと。

ありがとう、くまの人。
ユーザビリティの向上のため、obseve_fieldを使ってみる。

ActionHelperの一つなんだけど、
ターゲットの出すイベントで非同期のアクションを呼び出してくれる。

使い方は簡単。ビューに埋め込む。
<div id="<%= observe_update_id %>">
<%= check_box_tag observe_target_id, value %>
<%= observe_field observe_target_id, 
                  {:on=>'change',
                   :update=>observe_update_id, 
                   :with=>"'value_param_name='+(value)", 
                   :url=>{:controller=>'controller_name', 
                          :action=>'action_name', 
                          :addtion_param=>addition_param_vaule}}%>
 
</div> 
とこんな感じ。
observe_fieldの第一引数に監視するフィールドのIDを入れておき、
:updateオプションに更新したい要素のIDを入れておく。
サンプルの場合、チェックボックスのチェックを入れたり、外したりしたときにアクションが発生して、
自分自身が含まれる要素を書き換えることになる。

自分以外の所に指定してやれば、結果が返ってくる。
自分以外の所に指定して、そのIDも動的に生成してやれば、再帰的に呼び出すことも可能。

呼び出し先はurl_forの形式なので、固定的なパラメータはここに埋め込んでやればいい。

問題なのは、監視対象のフィールドの値をどうやって送るか。
:withオプションを指定しないときは、
value = request.raw_post || request.query_string
で受け取るらしい。

なんか生っぽくて気持ちが悪いのっで、出来ればparams[:name] = valueで受け取りたい。

で、:withオプションに
"'value_param_name='+(value)"
と指定してやる。ダブルクオートとシングルクオートが入り交じっているのは、
:withオプションの中身をJavascriptが評価するから。

ちなみにテキストフィールドなんかで定期的に評価したいときは、
:onオプションをやめて、
:frequencyオプションに秒数を入れてやればいい。

:onオプションには、change以外にもイベントを指定できる。

いやあ、便利便利。
前のページ      次のページ
ついめ~じ
ブログ内検索
フリーエリア
サニーカメラ
Powered by Ninja Blog    template by Temp* factory    icon by MiniaureType

忍者ブログ [PR]