【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はリクエストが成功したことを意味する。
レスポンスヘッダー:
レスポンスメッセージの2行目以降
サーバーに関する情報とレスポンスのメタデータ。 Content-Type はレスポンスのMIMEタイプを示し、Content-Length はレスポンスのコンテンツのサイズをバイトで示す。
MIME(Multipurpose Internet Mail Extensions)タイプは、データの種類や形式を識別するための標準化された識別子。MIMEタイプは通常、データの種類とサブタイプの組み合わせで表される。テキスト文書のMIMEタイプは text/plain であり、JPEG画像のMIMEタイプは image/jpeg
ボディ
実際のコンテンツ。この例では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内で使用できない文字や、特別な意味を持つ文字をエンコードするためのメカニズム
続きは、こちらで記載しています。
この記事が参加している募集
よろしければサポートお願いします!いただいたサポートはクリエイターとしての活動費に使わせていただきます!