認証が必要なサイトにサーバから自動的にアクセスする方法(と言うかcookieをコピーするだけです・・・)

あんまり書くとあれなんですけど、実際にやってみたら意外と簡単に出来てしまったので一応メモ。

自分自身の通信とは言え、やってることはセッションハイジャックと変わらない気がするな。。ドキドキ。

何をしてみたかったか

ログインが必要なサイトやWebサービス、色々あると思います。普通はブラウザからアクセスして見りゃいいんですが、

  • とりあえず自動的に何度もアクセスしたい
  • 自分のサーバ上にデータを保存したい

等の理由で、ブラウザからではなくサーバから当該サイトに直接アクセスしたいことがあるかも知れません。それが出来るかどうか試してみたかったので実際にやってみました。

どうやるか

前提として、当該サイトへのログイン権限(アカウントとかパスワード)を持っていることとします。(そりゃそうだ。)そもそもHTTPの通信だったらサーバにブラウザごっこをさせればいいので何とでもなりそうな気がしますが、一番簡単なのはcookieをそのまま持って行くことだと思います。

認証があるWebサービスでは、cookieベースで接続が維持されていることが多く、正規の手続きを経てログインしたユーザに対してはセッションID等を含めた、接続の維持に必要な情報がcookieとしてブラウザに保持されます。なので、このcookieを持っていさえすれば、サーバ側は「認証済みで通信してOKなユーザアクセス」として認識してくれるわけですね。

やり方

大きく分けて手順は2つです。cookieを取ってくるところと、それを実際に使ってアクセスするところ。

FireFoxLive HTTP Headerscookieを確認する

まずFireFoxをインストールし、アドオンのLive HTTP Headersを入れておきます。ヘッダを見るツールですね。

アドオンを入れた後にFireFoxを再起動すると ツール > Live HTTP Headers が表示されているのでこれを起動しておきます。するとウィンドウが立ち上がって、ここにhttpリクエストとレスポンスのヘッダ情報がプロットされていきます。

で、FireFoxを使って当該サイトにログインすると、Cookie情報が発行されます。Live HTTP Headersを見るとこんな感じでcookieが付いているはず。

※画像はtwitterにmantolとしてログインした時のもの。ちなみにtwitterで試したわけではないので、以下の手順がtwitterでうまくいくかどうかはわかりません。

左下の すべて保存 を押すとログを保存できるので保存しておきましょう。(※)

実際にサーバからアクセスしてみる

cookieを付けてサーバにアクセス出来る方法なら何でもいいと思いますが、ここではwgetにします。以下、参考にしたページ。

ほぼ一つ目のリンクのやり方ですが、--load-cookiesオプションは微妙にうまくいきませんでした。なので愚直に上の(※)で取っておいたcookieやその他のヘッダ情報を以下の感じで並べてアクセスすることにします。Cookieの中にダブルクウォートとかが入ってる場合はエスケープ(\)しないといけません。

wget
--header "Host: ****.com"
--header "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ja; rv:1.9.2.28) Gecko/20120306 Firefox/3.6.28 GTB7.1"
--header "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
--header "Accept-Language: ja,en-us;q=0.7,en;q=0.3"
--header "Accept-Encoding: gzip,deflate"
--header "Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7"
--header "Keep-Alive: 115"
--header "Connection: keep-alive"
--header "Referer: ****.com"
--header "Cookie: ******"
****.com

phpスクリプト上からだと、

exec('wget --header 〜〜〜〜 ');

とか書けばいいですね。これで、ブラウザからログインして見れるページのhtmlをサーバ上で手に入れることが出来ました。スクリプト化すれば自動アクセスもクローリングもスクレイピングもやりたい放題や!!(やらないけど。と言うかすぐサービス側にばれる思う。)

思ったこと

なんかcookieコピーするだけで通信が通る(認証される)って、ザルな世界だな。。とか思うんですが、それくらいcookie情報って言うのは大事なものってことですね。例えばfirefoxだと以下のようなツールもあるし、cookieは見ようと思えば簡単に丸見えなわけで。(別にツール使わなくても見れるけど。)

事実上自分しか使っていないマシンが他人に触られたり、あるいは公共のPCでログインしちゃうような時はなおさらcookieについて意識しておかないと危ないなぁ、と思った次第であります。

twitterRSS

RSSリーダーに登録

Add to GoogleSubscribe with livedoor ReaderMy Yahoo!に追加Subscribe with Bloglines