1.POSTとGETという2つのメソッド
HTTPのメソッドには8つのメソッドがある。
http://nw.seeeko.com/archives/50654465.html
POSTとGETの動作の違いをPHPのスクリプトで体験してみよう。
分かりやすさを優先して、余分なものは全て消してある。実際のプログラムはもう少し整形することになるだろう。
ここではあくまでも、仕組みをシンプルにお伝えすることを優先している。
(1)スクリプトの内容
◆login.html
ログイン画面<br> <FORM ACTION="result.php" METHOD="POST"> ID:<INPUT TYPE="text" NAME="id" VALUE=""><br> Password:<INPUT TYPE="password" NAME="password" VALUE=""><br> <INPUT TYPE="submit" VALUE="Login"> </FORM> |
実際の画面は以下のようになる
◆result.php ※結果表示のスクリプト
<?php print($_REQUEST['id']); ?> さん、ログインしました。 |
(2)POSTの場合
IDとしてuser1と、パスワードを入力してLoginボタンを押す。その後の画面(result.php)は以下のようになる。
(3)GETの場合
login.htmlの赤字の「POST」部分を「GET」に変更して実行する。
GETの場合は、以下のように、入力した情報がURLに表示される。ログインIDやパスワードが漏えいするので、これはよくない。それで、POSTが使われる。
http://127.0.0.1/result.php?id=user1&password=pass
なるほど。
じゃあ、GETは使われないのですね?
そうでもない。Yahoo!やGoogleの検索ではURLに値が表示される。おそらくGETで処理しているはずだ。
以下は、Yahoo!にて「network」というキーワードで検索した結果である。URLに p=network の表示がある。
これにより、この検索結果のURLを保存しておいたり、誰かに共有することも可能であり、それは一つの利点である。
また、Referer機能により、リンク先にリンク元の情報が送られる。このようにGETを利用してURLに情報が埋めこまれているから、どの検索エンジンのどのキーワードでリンク先に来たかが分かる。これによって、アクセス元の詳細な分析も可能になる。
Googleの場合は、さらにシンプルである。
たとえば、「security」というキーワードを検索すると、結果のURLは以下
https://www.google.co.jp/#q=security
◆参考:Webサーバを建てて、いろいろと実際に体験してみよう
Webサーバの簡単なたてかた。Windows7や8ではIISで立てられる。ASPによるプログラミングも簡単である。後日きちんと書きたい。 ツールとしては、IPAから以下が公開されている。最低限の手間と時間はかかるが、有効だと思う。
2.referer
HTTPでは、どのサイトから訪れたのかを記録するフィールドがある。これがrefererである。
これにより、ホームページのアクセス元の分析などが可能になる。どんなキーワードで検索されたかも分かるという利点もある。たとえば、Goolgeで「security」と入力して検索したとする。すると、検索結果は以下のようになる。
https://www.google.co.jp/#q=security
その検索結果のとあるサイトをクリックすると、Refererによって、上記のURLが通知される。このことから、Googleの「security」という検索キーワードをもとに、サイトを訪れたことが分かり、便利と言える。これは、検索エンジンがPOSTではなくGETメソッドを利用しているから、このようにURLに情報を付与する。
しかし、セッション管理でGETメソッドを利用している場合、問題がある。URLにセッション情報が記載されるので、リンク先にセッション情報が漏えいする。
参考であるが、過去問H26年春SC午後Ⅰ問1では、以下の記述がある。
GETメソッドではなくPOSTメソッドを使用しておかないと、HTTPヘッダ内のフィールドが原因で、バナー広告に設定されたリンク先のWebサーバへセッションIDが漏えいすることが考えられるね。 |
★詳しくは、キャプチャを付けたり、図にして解説するつもりだ。
3.Webビーコン
beaconとは標識などを意味する言葉であり、Webビーコンとは、WebサイトやHTMLメールなどに埋め込まれた小さな画像のことである。
Webバグと言われることもある。バグといってもプログラムの誤りを表わすバグという意味ではない。
一体、何の目的で、そんなことをするんですか?
アクセスしたユーザのIPアドレスなどを把握するためである。IPアドレスや時刻などを元に、アクセス履歴を分析することができる。過去問では、次のように述べられている。
「webページなどに小さい画像を埋め込み、利用者のアクセス動向などの情報を収集する仕組み(H21春FE午前問42)」 |
メールを送っても、それが読まれたかどうかは分からない。
そこで、Webビーコンの登場である。もしメール受信者がHTMLメールを開くと、埋め込まれた画像ファイルのリンクがサーバに通信をする。つまり、履歴が残るので、読んだかどうかが分かる。しかも、ユーザ毎に違う画像をリンクさせておけば、誰がアクセスしたかまで分かる。
Webビーコンを利用することで個人情報が漏えいすることはないが、利用者に無断で情報収集することには一部批判がある。そこで、SBIのサイトでは、WebビーコンとCookieを利用してアクセス履歴をとっていることを公表している。
4.プロキシツールによる検査
IPAの「『セキュア・プログラミング講座 (Webアプリケーション編)』 ブートアップセミナー」(http://www.ipa.go.jp/files/000030878.pdf)では、ローカルプロキシツールの例として、OWASP ZAP、Fiddler、Burp Proxyが挙げられている。
最初に掲載されているOWASP ZAPが無償であることからも利用するにはいいと思う。
①OWASP ZAPダウンロード
https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
から、Download ZAP
②JREのダウンロード
③OWASP ZAPを使った脆弱性診断
以下に解説があるが、スパイダー機能でURLを見つけ出し、そのURLに対してスキャンをする(攻撃>動的スキャン)
http://gihyo.jp/dev/column/newyear/2016/owasp?page=2
★詳細は別途記載予定
5.クローラへの耐性
H29秋SG午後問2で、「ウェブ健康診断仕様」における「クローラへの耐性」が問われました。(といっても、選択式)
https://www.ipa.go.jp/files/000017319.pdf
クローラとは、検索エンジンがサイトの情報を知るためのプログラムです。クローラの通信により、サーバのレスポンスが悪化する場合があります。つまり、可用性が失われるのです。これに耐えられるかが「クローラへの耐性」です。