GET送信とPOST送信によるサーバのログの中身

2019年5月20日

プログラミング系列サムネイル画像1

実験結果とまとめのみ。

まず今回の結論として、確かにPOST送信の方が見かけ上安全なように感じる。
しかし、実際の中身までは確認できていない。

したがって、Wireshark等のパケットキャプチャソフトを用いて今後の解析を進めることとする。

背景

「クライアントからサーバーへのデータ送信」⇒「受け取ったデータをそのままクライアントへ表示」というクライアントとサーバ間のデータのやり取りを考える。

Webシステムの仕組み
https://dreamplus.jimdo.com/

このようなクライアントサーバ間のやり取りは、簡単なhtmlとphpの記述で実現できる。
手法的にはhtmlのタグのメソッド属性である、GET送信やPOST送信を用いる。

それぞれの送信方法で特徴も異なるが、今回は以下の特徴に注目してみる。

GET送信はデータをサーバに送るURLに付与するため、第三者に見られたくないやり取りには適さないと言われる。 (例:アドレスバー内のデータ表示等)

一方、POST送信はサーバへデータ情報を登録するため、パスワード等秘密にしたい情報を送る場合等に適すると言われる。

ここで、一つの疑問が生じる。

POST送信もサーバーにデータを送ることには変わりないので、送信途中のデータを盗み見られると解析されるリスクがあるのではないか

ということだ。要は一概にPOSTが安心と言っていいのか、という疑問である。

現実的に言えば、殆どのサイトは符号化等でセキュリティを確かめているだろう。

実験

今回は、クライアント側でget送信、post送信を行い、サーバー内のlogを確認することに留める。
結果としては、確かにpost送信の方が安全に見える。

GET送信

以下のように、「テスト送信」というデータをサーバに送信する。

GET送信

送信データがそのままサーバから返ってくる。検索窓に「テスト送信」とある。

GET送信のサーバからのデータ表示

サーバのログは以下の通り。受信結果を確認すると、送信したデータが変換されている。

・GET送信(クライアント⇒サーバー)
::1 – – [25/Apr/2019:22:15:41 +0900] “GET /test/get_submit.html HTTP/1.1" 304 – “-“
・受信(サーバー⇒クライアント)
::1 – – [25/Apr/2019:22:15:47 +0900] “GET /test/get_receive.php?a=%E3%83%86%E3%82%B9%E3%83%88%E9%80%81%E4%BF%A1 HTTP/1.1" 200 15 “http://localhost/test/get_submit.html"

POST送信

GET送信と同様に、サーバーにデータを送り、そのデータをそのまま表示する。

POST送信

受信結果も先ほどと同様。

POST送信の返信結果

サーバのログは以下の通り。

・POST送信(クライアント⇒サーバー)
::1 – – [25/Apr/2019:22:17:51 +0900] “GET /test/post_sousin.html HTTP/1.1" 304 – “-"
・受信(サーバー⇒クライアント)
::1 – – [25/Apr/2019:22:17:59 +0900] “POST /test/post_zyusin.php HTTP/1.1" 200 15 “http://localhost/test/post_sousin.html"

実験結果から

GET送信の場合では、「"GET /test/get_receive.php?a=%E3%83%86%E3%82%B9%E3%83%88%E9%80%81%E4%BF%A1 HTTP/1.1″」となり、送信データがURL用に変換されている。

一方、POST送信の場合ではそのようなデータは確認されなかった。

getはともかく、postについては送信途中のパケットの詳細を確認したい。
正直、postも本当に安心なものかどうか疑わしい、というのが今回実験を行った思いである。

参考:「基礎からのPHP」 西沢夢路著