HTTP基礎入門
2017/05/27
Burp Suite Japan User Group
• HTTP(HyperText Transfer Protocol)
情報の転送プロトコル(通信規約)
• URL(Uniform Resource Locator)
情報の場所を指し示す書式
• HTML(HyperText Markup Language)
情報を表現する文書フォーマット
Webを構成する3つの技術
1
Webページにアクセスする時
サーバークライアント
閲覧したいページのURLを入力
結果としてコンテンツが表示される
要求
応答
http://www.example.com
http://www.example.com
2
実際はこんな通信をしています
サーバークライアント
HTTP Request
HTTP Response
GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101
Firefox/41.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
HTTP/1.1 200 OK
Date: Sun, 25 Oct 2015 18:06:18 GMT
Content-Length: 96
Connection: close
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
Hello World!
</body>
</html>
http://www.example.com
http://www.example.com
3
HTTPについて
理解を深めよう!
4
• HTTP/0.9:1991年~
• HTTP/1.0(RFC 1945):1996年~
• HTTP/1.1(RFC 7230 ~ 7235):1997年~
• HTTP/2 (RFC 7540):2015年~
いくつかプロトコルバージョンがある
コレの話
5
• スキーム名
アクセスするプロトコルを指定する部分(http,https,ftp…)
• ホスト名
アクセス先のホスト名(FQDN,IPアドレス)を指定する部分
接続先のポート指定もできる。(例:http://www.example.com:8080)
• ファイルパス
取得したいリソースのファイルパスを指定する部分
• クエリー文字列
ファイルパスで指定するリソースに対して渡す文字列
URLの構造
http://www.example.com/member/index.html?id=user
スキーム ホスト名 ファイルパス クエリー文字列
6
• 特殊記号や日本語などURLに使用できない文字を
URL上に記述する場合に用いられる
• バイト単位で「%xx」という形式で表される
※xxは16進数表記
パーセントエンコーディング
http://www.example.com?id=%82%D9%82%B0
「ほげ」という文字をエンコードした値
7
リクエストとレスポンス
サーバークライアント
①HTTP Request
②HTTP Response
必ずクライアント側からリクエストが送信され
サーバー側からレスポンスが返される
※HTTP1.1の場合
8
HTTPリクエストの構造
POST /login.php HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101
Firefox/41.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://www.hoge.co.jp/login.php
Cookie: PHPSESSID=4oqiftb4gc294fbfgkd0m4cfa4
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 21
id=user&pass=password
リクエストライン
ヘッダーフィールド
空白行
メッセージボディ
9
リクエストラインの構造
POST /login.php HTTP/1.1
メソッド リクエストURL プロトコルバージョン
メソッド名 内容
GET データを取得することをWebサーバーに要求
HEAD
データそのものは要求せず、メッセージヘッダーだ
けを取得することをWebサーバーに要求
POST Webサーバーに、データを送信
PUT Webサーバーに、ファイルをアップロード
DELETE Webサーバー上にあるデータを削除することを要求
OPTIONS サポートしているメソッドの取得
TRACE 自分宛にリクエストメッセージを返す
CONNECT プロキシサーバーなどに、トンネルの確立を要求
10
HTTPレスポンスの構造
HTTP/1.1 200 OK
Date: Sun, 25 Oct 2015 18:06:18 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Sun, 25 Oct 2015 17:54:17 GMT
Accept-Ranges: bytes
Content-Length: 96
Connection: close
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
Hello World!
</body>
</html>
ステータスライン
空白行
ヘッダーフィールド
メッセージボディ
11
ステータスラインの構造
HTTP/1.1 200 OK
プロトコルバージョン ステータス
コード
テキスト
フレーズ
ステータスコード 概要
100番台 処理が継続している
200番台 正常終了
300番台 リダイレクト
400番台 クライアントエラー
500番台 サーバーエラー
12
HTTPは基本的にはステートレス
サーバークライアント
前の通信状態は引き継がない
お互い関係ない独立したもの
1回目のHTTP通信
2回目のHTTP通信
13
•ショッピングカートに入れた商品情報
• ログイン後のユーザの認証状態
…etc
でも状態を保持したい場合も多い
14
セッション管理
サーバークライアント
HTTP通信を関連づけて
処理することが可能
セッションIDを発行
セッションIDを送信
1回目のHTTP通信
2回目以降のHTTP通信
15
• サーバーがユーザーのブラウザに一時的に情報を保
存する仕組み
• アクセスのたびに適切なCookieがサーバーに送信
される
Cookie
16
Cookieを利用したセッション管理
サーバークライアント
POST /login.php HTTP/1.1
Host: www.example.com
(略)
id=user&pass=password
HTTP/1.1 302 Found
Set-Cookie: sessionid=2d84e80feb2749d;
(略)
ログイン認証
セッションIDを発行
GET /top.php HTTP/1.1
Host: www.example.com
Cookie: sessionid=2d84e80feb2749d;
(略)
HTTP/1.1 200 OK
(略)
セッションIDを照合
セッションIDに
対応する結果を返す
ブラウザに
Cookieをセット
ブラウザがCookie
を送信
7927d0cd79707f9
14f93fff42d395ee
2d84e80feb2749d
セッションID
を格納
http://hoge.co.jp
http://hoge.co.jp
http://hoge.co.jp
○○さんようこそ!
ID:
PASS:
login
17
Local Proxy Tool
18
• 他のコンピュータの「代理」として他のサーバーと
通信するサーバー
• 通信の効率化やセキュリティ向上などを目的として
よく利用される
一般的なProxyサーバ
HTTP Response
HTTP Request HTTP Request
Proxy サーバー
HTTP Response
クライアントはProxy サーバーとやり取り Proxy サーバーは目的のサーバーとやり取り
クライアント サーバー
19
Local Proxy Tool
Local Proxy
HTTP Request
HTTP Response
ブラウザ
HTTP Request
HTTP Response
クライアント環境
サーバー
• クライアントのLocal環境で動作するProxy
• 通信内容の詳細を確認できる
• 通信内容を編集して送信することもできる
20
HTTPSは通信が暗号化されている
HTTP
HTTPS
??
21
暗号化通信の中身も見ることが可能
クライアント サーバ
Local Proxy
Local Proxyの
SSL証明書
本物のサーバの
SSL証明書
• Local Proxy上で、暗号化通信を複号するため
HTTPSの通信もHTTP同様に閲覧、編集が可能
• クライアントはLocal ProxyとSSL通信を行うため、
デフォルトでは証明書エラーが発生する
22

[BurpSuiteJapan]HTTP基礎入門