Web基礎知識をおさらいする

基礎中の基礎。いつでも体系的に口頭で説明できるように自戒を込めて。

HTTPってなに?

Hypertext Transfer Protocol.RFC2616で規定された、TCP/IPをベースとしたネットワークプロトコル

TCP/IPってなに?

ネットワークプロトコル。以下のように4層の階層型なっている

データ送信時は上から下の層へデータは流れる。データ受信時は当然逆の流れ。

HTTPSってなに?

ネットワークプロトコル。httpプロトコルとの違いは、TCPとHTTPの間にさらにTLS(Transport Layer Security)プロトコルを利用する点。 TLSを利用することで、セキュアな通信を実現している。

TLSについて

  • TLSでは一般にSSL(Secure Sockets Layer)と呼ばれる
  • 以下のセキュリティ上の機能を提供する
    • クライアントとサーバの認証機能
    • 通信データ暗号化
    • 通信データの改ざん検出
  • TLSTCP上で利用されるため、まずTCP接続を確立する必要がある
  • TCP接続後にTLSハンドシェイクを行い、TLS接続を確立する。
  • TLSハンドシェイクでは、TCP接続の3ウェイハンドシェイクでやり取りする処理に加えてさらにパケットを最低1往復半する必要がある。

ブラウザ上にWebページが表示されるまでの流れは?

クライアント->サーバ

  1. ブラウザにURL(http://example.com など)を入力する
  2. ゾルバを介してDNSサーバに問い合わせを行い、IPアドレスを取得する
  3. HTTPメッセージを作成し、上記で取得したIPアドレスへHTTPリクエストを送信する

サーバ->クライアント

  1. サーバがHTTPリクエストを受信すると、サーバ側ソフトウェアがリクエストを解析し、内容に応じて処理を実行する
  2. HTTPメッセージを作成し、クライアントにHTTPリクエストを送信する
  3. クライアントは受け取ったレスポンスを解析して、その内容に基づいてWebページを表示する

ブラウザがWebページが描画されるまでの流れは?

サーバからHTTPレスポンス受信後〜

  1. Loading: リソース読み込み
  2. Scripting: JavaScriptの実行。ブラウザのJavaScriptエンジンがコンパイルを行う
  3. Rendering: レイアウトツリーを構築する。CSSがどこに適用されるかはここで計算する
  4. Painting: レンダリング結果を描画する。ブラウザのグラフィックエンジンがレンダリングを行う

代表的なWebアプリケーション脆弱性は?

Webアプリに外部からの入力に応じて変化する箇所がある場合、この部分のHTML生成に問題があるとXSS脆弱性が発生する。 例えば、ユーザのクッキー値を送信するスクリプトを設置しておくことで、ユーザのセッションIDが盗まれるなど。

  • SQL Injection

ユーザの入力を発行するSQLに含めるような処理がある場合、適切に対応しないとSQLが改ざんされて、場合によってはDB内の全てのデータ盗まれてしまう。 対策としては、プレースホルダ方式を使い、後からSQLが改ざんされないようにするなど。

攻撃者によって用意された攻撃用Webページにユーザがアクセスすると、攻撃用Webページ内にあらかじめ用意されていた不正なリクエストが攻撃対象サーバに送信する。攻撃対象サーバ上のWebアプリケーションは不正なリクエストを処理し、ユーザが意図していない処理が行われてしまう。

クッキー生成の不備、セッションIDの盗聴、XSSによる漏洩、PHPやブラウザの脆弱性、URLにセッションIDを保持している場合など、セッション管理に不備があると第三者に利用者に対するなりすましを行われてしまう。

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

暗号技術入門 第3版

暗号技術入門 第3版

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)