👮
【徳丸本で学ぶ!】HTTPプロトコルとセッション管理の基本とセキュリティ対策
🚀初めに
徳丸 浩 さんの 「 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[固定版] 脆弱性が生まれる原理と対策の実践 」通称 徳丸本を勉強しています
今回は学習ブログの第二回目になります
🔍内容
HTTPプロトコル
- 学ぶ理由: 多くのウェブアプリケーションの脆弱性はHTTPプロトコルに由来するため、その構造を理解することがセキュリティ対策の第一歩となるから
HTTP通信の構造
リクエスト情報
- リクエスト先: GET http://localhost:8080/tokulearn/xss/view HTTP/1.1
GET http://localhost:8080/tokulearn/xss/view HTTP/1.1
host: localhost:8080
...省略
- 内容
- GET http://localhost:8080/tokulearn/xss/view HTTP/1.1
- リクエストの種類(GET) リクエスト先ドメイン名(https...) 通信プロトコル (HTTP/1.1)
- HTTP/1.1は通信プロトコルのバージョン、200は成功を意味するステータスコード。
レスポンス情報
HTTP/1.1 200
X-Content-Type-Options: nosniff
X-XSS-Protection: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: text/html;charset=UTF-8
Content-Language: ja
Date: Tue, 15 Oct 2024 21:50:05 GMT
content-length: 573
- 内容
- HTTP/1.1 200
- これは通信プロトコルとレスポンスコードを示す。HTTP/1.1は通信プロトコルのバージョン、200は成功を意味するステータスコード。
- Content-Type
- MIMEタイプを表しており、返されるリソースの種類を示す。例えば、この場合は text/html なので、HTML文書が返されていることを意味している。詳しいMIMEタイプの情報はこちら。
- content-length
- レスポンスのボディ部分のサイズ(バイト数)が記載されている。この例では、573バイトのデータが返されていることになる。
- HTTP/1.1 200
GETとPOSTを使い分けよ
HTTP1.1を定義している RFC7231
(実際読んだけど日本語訳は何書いてあるかわかりませんでした)
-
GET/POSTメソッドについて以下のガイドラインが記載されている
- GETメソッドはリソースの取得/参照に利用すること
- GETメソッドは副作用(更新や削除や登録)がないことが期待される
- 秘密情報を送信する際はPOSTメソッドを使うこと
-
GETメソッドを利用するユースケース
- POSTメソッドのユースケースに該当しないとき
-
POSTメソッドを利用するユースケース
- データ更新/削除/登録がしたい
- 秘密情報を送信したい
- 量が多いデータを送信したい
Refererの脆弱性
リクエストには Refeler タグを含む場合がある
Refelerタグはページを遷移した際の遷移元ページのURLを含んでいる
以下のように PageAからPageBへの遷移をした場合、refererには pageAのURIが入る
- 脆弱性
- セッションIDを含んでいる可能性がある
- セッションIDを盗まれなりすまされる可能性あり
- 秘密情報を含んでいる
- 漏洩する可能性あり
- セッションIDを含んでいる可能性がある
hideenの脆弱性
- hiddenパラメータ自体の書き換えは本人でしかできない
- 脆弱性というほどではなさそう
- 第3者には堅牢である
webのステートレス
- セッションやCookieなどで値を保持しないもの
- バックエンドのキャッシュやDBで値を保持し、認証のたびにバックエンドで認証済みかを確認するなど
セッション管理
webのステートフル
- セッションやCookieなど値の状態を保持しているものがステートフル
- セッション情報にToken値があり、認証はCookieにあるセッションIDから、セッションに格納されてあるTokenを使用し認証を行うなど
クッキーとセッションの使われ方
- XSSの標的になることが多い
- 認証で生成したToken値など秘密情報を格納するのには適していない
- Token等はセッションで保持し、CookieではセッションIDを保持する
- Cookieを盗まれるとセッションIDも漏洩し、セッションにある情報が漏洩するため注意
- Cookieには格納するデータにサイズ制限があるため、長い文字列等のデータはセッションに格納することが好ましい
クッキーモンスターバグ
Cookieのサイズを制限していない場合に発生しやすい
Cookieデータに過剰なデータを送信し、正常なセッションID等の管理ができないようにさせる
📝まとめ
今回紹介したHTTPプロトコルやセッション管理に関する知識は、Webアプリケーションのセキュリティを強化するために不可欠。
特に、GETとPOSTの正しい使い分けや、RefererやCookieの扱いには注意が必要。
脆弱性を理解し、適切な対策を取ることで、攻撃者からのリスクを軽減できる。また、クッキーのサイズ管理やステートレスな設計も、システムの安全性とパフォーマンスを向上させるための重要なポイント。
💨学習スケジュール
- 【徳丸本で学ぶ!】バグと脆弱性の違いについて XSS(クロスサイトスクリプティング)を使って確認する
- 🟢(now)【徳丸本で学ぶ!】HTTPプロトコルとセッション管理の基本とセキュリティ対策
- 【徳丸本 セキュリティ】XSS
- 【徳丸本 セキュリティ】SQLインジェクション
- 【徳丸本 セキュリティ】CSRF
- 【徳丸本 セキュリティ】WebAPI実装の脆弱性
- 【徳丸本 セキュリティ】DOMBasedXSS
- 【徳丸本 セキュリティ】セッション管理の不備
- 【徳丸本 セキュリティ】インジェクション
- 【徳丸本 セキュリティ】ディレクトリ・トラバーサル
- 【徳丸本 セキュリティ】ログイン機能
- 【徳丸本 セキュリティ】自動ログイン
- 【徳丸本 セキュリティ】アカウント管理
- 【徳丸本 セキュリティ】認可とログ出力
Discussion