見出し画像

【Webセキュリティ基礎】HTTPとセッション管理, GET/POST, 認証と認可, Basic認証, Cookie, 同一オリジンポリシー

はじめに

Webセキュリティに関しても備忘録まとめていく。

2018年に購入していたにも関わらず、途中までで読みきれていなかった「安全なWebアプリケーションの作り方」より。


脆弱性が生まれる理由

主に2種類
1)バグによるもの

  • SQLインジェクション

  • XSS(クロスサイト・スクリプティング)

2)チェック機能不足

  • ディレクトリ・トラバーサル

HTTPとセッション管理

HTTP通信はクライアント(通常はウェブブラウザ)とサーバー間のリクエストとレスポンスのプロセスで構成される。ステートレス(サーバー側では状態を保持しない)
ウェブブラウザがウェブページをリクエストすると、サーバーは適切なレスポンスを返す。

GETメソッド

リクエストメッセージ
ShellScript

# リクエストライン
GET / HTTP/1.1
# ヘッダ-
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Connection: keep-alive
Host: www.example.com

リクエストライン:リクエストメソッド(GET)・パス・プロトコルバージョンからなる。

  • リクエストメソッド: この例では GET。サーバーに特定のリソースを要求する。

  • パス(URL): /。これはルートディレクトリを指し、ウェブサイトのホームページを要求している。通常はホスト名(今回だとwww.example.com)を含まない

  • プロトコルバージョン: HTTP/1.1

ヘッダー

  • リクエストメッセージの2行目以降。名前と値をコロン「:」で区切った形

  • リクエストに関する追加情報。 Host はリクエストが送られるサーバーのドメインを示し、User-Agent はリクエストを行っているクライアントの情報を提供する。

  • 必須なのはHostだけ。

HTTPレスポンス
ShellScript

HTTP/1.1 200 OK
Date: Mon, 23 May 2024 22:38:34 GMT
Server: Apache/2.4.1 (Unix)
Content-Type: text/html; charset=UTF-8
Content-Length: 155
Last-Modified: Wed, 20 May 2024 22:11:15 GMT
Connection: close
<html>
<head>
<title>An Example Page</title>
</head>
<body>
Hello World, this is a very simple HTML document.
</body>
</html>

ステータスライン

  • HTTP/1.1 200 OK。これはプロトコルバージョン、ステータスコード(200)、ステータスメッセージ(OK)を示す。200はリクエストが成功したことを意味する。


安全なWebアプリケーションの作り方

レスポンスヘッダー:

  • レスポンスメッセージの2行目以降

  • サーバーに関する情報とレスポンスのメタデータ。 Content-Type はレスポンスのMIMEタイプを示し、Content-Length はレスポンスのコンテンツのサイズをバイトで示す。

  • MIME(Multipurpose Internet Mail Extensions)タイプは、データの種類や形式を識別するための標準化された識別子。MIMEタイプは通常、データの種類とサブタイプの組み合わせで表される。テキスト文書のMIMEタイプは text/plain であり、JPEG画像のMIMEタイプは image/jpeg


安全なWebアプリケーションの作り方

ボディ

  • 実際のコンテンツ。この例ではHTMLドキュメント

POSTリクエスト:Referer / パーセントエンコーディング

  • クライアントからサーバーへデータを送信するために使用される。

  • 通常、フォームの送信、ファイルのアップロード、またはウェブアプリケーションに対する命令を送る際に使われる

例)ユーザーの名前が「田中 太郎」で年齢が「30」、そして送信ボタンをクリックした場合

ShellScript

POST /submit-form HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 58
Referer: http://www.example.com/form.html

name=%E7%94%B0%E4%B8%AD%20%E5%A4%AA%E9%83%8E&age=30&submit=Submit

リクエストライン

  • POST /submit-form HTTP/1.1 は、/submit-formパスにPOSTメソッドを使用し、HTTPバージョン1.1プロトコルを通じてリソースを要求することを示す。

ヘッダー

  • Content-Type: application/x-www-form-urlencoded は、フォームデータがURLエンコードされていることを意味する。Content-Length はボディの長さを示しす。

Referer

  • http://www.example.com/form.html は、リクエストが発生した元のページ(リファラー)を示す。これはサーバーがどのページからリクエストが来たかを知るのに役立つ。

  • refererがセキュリティ上の問題になるのは、URLが秘密情報を含んでいる場合。典型的にはURLがセッションIDを含んでいる場合、Referer経由で外部に漏洩して、成りすましに悪用される可能性がある。

パーセントエンコーディング:

  • URL内で使用できない文字や、特別な意味を持つ文字をエンコードするためのメカニズム

続きは、こちらで記載しています。


この記事が参加している募集

仕事について話そう

よろしければサポートお願いします!いただいたサポートはクリエイターとしての活動費に使わせていただきます!