2012年8月21日火曜日

FiddlerでHTTPヘッダーの改ざん

現在の開発現場で担当しているのはとあるソーシャルゲーム。

サーバ側プログラマーは自分一人だったので、開発サーバのディレクトリをローカルのMacでマウントしてそこをEclipseのWorkspaceにしちゃうという、かなりアクロバティックなやり方をしていた。

これだと、
コーディング → サーバにアップ
という作業が必要なく、コーディングしたものがすぐに反映されるのでかなり重宝していた。

ただ、もう一人サーバ側プログラマーが加わったこともあり、何より「さすがにちょっと危険かも」という気がしてきたので、やり方を見直すことにした。

では、実際にどのようにすればいいのか。

必要要件としては以下のとおり。

  • 開発者ごとに別々に作業ディレクトリがある
  • 動作確認はローカルではなくサーバで行う
  • フロント側のFlashやJSは共通のものを使う
  • 全環境でソースは設定ファイルに至るまで共通


まずは簡単なところから手を付ける。

開発サーバに
・共通作業ディレクトリ
・プログラマーA作業ディレクトリ
・プログラマーB作業ディレクトリ
を作成。

Apahceのバーチャルホストの設定で
・dev.example.com → 共通作業ディレクトリ
・hoge.dev.example.com → プログラマA作業ディレクトリ
・fuga.dev.example.com → プログラマB作業ディレクトリ
とドキュメントルートを設定。

ここまではいいのだけど、問題はここから。

Flashから呼ばれるAPIのホスト名はdev.example.comとなっていて、共通のFlashを使うので、どうにかして
・プログラマA dev.example.com → hoge.dev.example.com
・プログラマB dev.example.com → fuga.dev.example.com
としてやる必要がある。

そこで登場するのがFiddlerというweb debugerツール。

今までも通信ログの確認などでは使っていたのだけど、調べてみるとかなりディープなことができる模様。

【Rules】→【Customize Rules】をクリック。

そうするとテキストエディタが起動するので、OnBeforeRequestというファンクション内に、
if ( oSession.HostnameIs( "dev.example.com" ) ) {
    oSession.hostname = "hoge.dev.example.com";
}
と書いてやる。

ようするに、飛び先のホスト名がdev.example.comの時はホストをhoge.dev.example.comに置き換えちゃえと指定してやるわけだ。

で、上書き保存してdev.example.comにアクセスすると、しっかりとhoge.dev.example.comに飛ぼうとしてくれた。

参考URL:http://www.fiddler2.com/fiddler/dev/scriptsamples.asp

後はhostsの設定をしてhoge.dev.example.comの飛び先のグローバルIPをdev.example.comのグローバルIPにしてやればいいんだけど、hostsに書くんじゃなくて、さっきのプログラムに書くやり方でできないかなーと探してみたところ、ばっちり見つかった。

if文内に
oSession["x-overrideHost"] = "飛び先のグローバルIP";
と書いてやると、意図したとおり動いてくれた。

いやー、Fiddlerって凄いっす。

調べれば調べるほど奥が深いし、色々と悪いこともできちゃいそうな気がする・・・

後はそれぞれの作業ディレクトリをGitで管理してやれば素敵なことになるだろうから、引き続きGitの勉強を頑張るのです。

0 件のコメント:

コメントを投稿