HTTP通信とそのセキュリティ対策について
情報処理安全確保支援士の勉強で学んだことをアウトプットしていきます。 ここではWebサーバセキュリティ、特にHTTP通信とそのセキュリティについて纏めております。
目次
①HTTP通信の流れ
通常、私たちがインターネットを通して「https://~」と入力してどこかのホームページを見ている時、ブラウザとWebサーバに送るデータをHTTPリクエストといいます。HTTP通信の流れ(リクエスト)は以下の通りになります。
1.URLを解読する
2.キャッシュにIPアドレスが無いか確認する
3.DNSでIPアドレスを取得する
4.IPアドレスでWebサーバにリクエストする
5.ポート番号を割り当てる
6.HTTPリクエストを送信する
②GETリクエスト/POSTリクエストとセキュリティ
GETリクエストとPOSTリクエストの一番の違いはパラメータの受け渡し方になります。 GETはパラメータをクエリストリングに挿入します。 クエリストリングとはURLの後に''?''から始まるエンコードされた文字列です。 この場合、クエリストリングを含むURLはブラウザのアドレスバーにそのまま表示され、さらにログにRefererとしても残り、リンク先にも送信されます。 故に漏洩する危険があるといわけです。
一方でPOSTではWebサーバに送信するユーザの入力情報はリクエストボディを使って送信するので少しは安全になります。ただ、この場合でも通信をキャプチャされると漏洩してしまうので、HTTPSのようにSSL/TLS等との併用が望ましいです。
GETとPOSTはセキュリティ観点で上記のような違いがあります。
③HTTP通信のセキュリティ対策
HTTPSのようにSSL/TLSで通信を暗号化するのはもちろんのことですが、
ステートレスなプロトコルであるHTTPには必須ともなるセッション管理に対するセキュリティは非常に重要です。
セッション管理に代表される手法としてCookieがありますが、このCookieはセッションハイジャック等のハッキング攻撃でしばしば標的の的となります。
セッションハイジャックについては以下の記事を参考にしてください。
したがってCookieを使用する際は極力安全な状態にしておくことが鉄則となります。
以下、Cookieに設定できるセキュリティ上推奨されている設定になります。
domain:指定したドメインとそのサブドメインにのみCookieを送信する。 Expires:文字通りCookieの有効期限を設定します。
Secure:設定するとHTTPS通信でないとCookie情報を送信できなくなります。
HttpOnly:CookieへのアクセスをHTTPヘッダからのみに限定できます。
これにより、Javascript等クライアント側のスクリプトからはアクセスできなくなり、悪意のある第三者がXSSなどの攻撃でcookieを読み取ることを防ぐことができます。
以上まとめになります。走り書きになってしまいましたが随時内容を更新していく予定です。