ja ja ja en ja en ja ja en ja ja en ja en nl ja ja ja ja ja ja ja ja ja ja ja ja ja cv es es ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja
Railsアプリの場合は、クッキーセッションの認証用データを作成するためのシークレットキーがconfig/environment.rbに書かれており(下記の:secretの部分)、ここが秘密部分に当たります。
config.action_controller.session = { :session_key => '_hoge_session', :secret => '4d6c53b43ce6e777251291be7aa191eb80773f332731424c411c3f79bbee485250c6fd24aa8503757cf973e35dfc8a18efb1ce63e26e888431bfa537e6fce4b7' }
普通はその部分だけ消すかxxxxxみたいに適当な値にしてコミットすればいいのでしょうが、それだとupdateしてから実際に動かす前に必ず修正しないといけないし、コミットする前にも消したかどうか確認しないといけないしでとても面倒。
何かうまい方法はあるのかなーとずっと思っていたのですが、今日たまたまfastladderのソースを見ていたら、うまいやり方で解決していて感心したので紹介します。こんな感じ。
secret = "" secret_path = File.join(RAILS_ROOT, "config/secret.txt") if File.exist?(secret_path) secret = open(secret_path) { |io| io.read }.gsub(/\s/, '') end if secret.empty? characters = ("0".."9").to_a + ("a".."f").to_a secret = Array.new(128) { characters[rand(characters.size)] }.join open(secret_path, "w") { |io| io.write(secret) } end config.action_controller.session = { :session_key => '_fastladder_session', :secret => secret }
秘密部分をランダム生成して別ファイルに書き出し→次回以降はファイルから読み込みという訳です。これはRailsアプリを公開したいときに使えるテクニックですねー。
willnet 2008-11-17 22:13
« Rails2.1系にCSRFに対する脆弱製が発見さ… レバレッジ・シンキングを読んだ »
id:willnet はてなブログPro
べんりで楽しいwebサービスをたくさん作りたい
読者です 読者をやめる 読者になる 読者になる
@netwillnetをフォロー
失敗したテストのログだけを出力するぞ
iCARE Dev Meetup #34で登壇しました
`Thread.current[:hoge]`はスレッドローカル変数を参照していると思いきや実際はファイバーローカル変数だった