ketyiaの学んだこと議事録

このサイトでは学んだことを記事にまとめていきます

ウェブ・セキュリティ基礎試験(徳丸試験)の勉強 ②HTTP

ウェブ・セキュリティ基礎試験(徳丸試験)の勉強 ②HTTP


こんばんわ!
世間では徳丸試験といわれている、ウェブ・セキュリティ基礎試験に挑戦しようということで、いつものごとくアウトプットで記事にまとめていきます。

今回は第二回目のHTTPについてまとめます。

HTTP


HTTPは「HyperText Transfer Protocol」の略で、ウェブ上で情報を送受信するためのプロトコル(通信規約)の一つです。

HTTPはクライアント(通常はウェブブラウザ)とサーバー(ウェブサイト)間の通信を制御します。クライアントがHTTPリクエストを送信し、サーバーがHTTPレスポンスを返します。これにより、ウェブページのテキスト、画像、その他のリソースがユーザーに表示されます。

ステータス


100台は処理が継続、200台は正常終了、300台はリダイレクト、400台はクライアントエラー、500台はサーバーエラーを表しています。

メッセージボディ


HTTPリクエストやレスポンスのメッセージボディは、送信するデータそのものを含みます。例えば、POSTリクエストを使用してフォームデータを送信する場合、そのデータはメッセージボディに配置されます。同様に、サーバーがHTMLページや画像などのリソースをクライアントに送信する際、そのリソースはレスポンスのメッセージボディに含まれます。

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


パーセントエンコーディング(URLエンコーディングとも呼ばれます)は、URL内で安全に特殊文字を表現するためのメカニズムです。これは、URLがASCII文字セットのみをサポートしているため、特殊文字や非ASCII文字をURLに含めるために必要です。パーセントエンコーディングでは、特殊文字は “%” 記号に続く2つの16進数数字によって表現されます。例えば、スペースは “%20” と表現されます。

Referer


HTTPのReferer(実際には「referrer」のスペルミスから来ています)ヘッダーは、リクエストが発生したページのURLをサーバーに伝えるために使用されます。これにより、サーバーはユーザーがどのページから来たのかを知ることができ、これを利用してアクセス統計を取ったり、キャッシュの動作を最適化したり、またはユーザーエクスペリエンスをパーソナライズしたりすることができます。

クッキー


データをブラウザに保存する仕組みです。これにより、次回からログインなどの手続きをすることなくWebサービスを利用できたり、好みに応じた広告を表示させることができます。

ただ、クッキーが保持できる値の個数や文字列長に制限があるのと値を変更できるので秘密情報に向かない点があります。

代表的なオプションは下記です

Domain

デフォルトでは、クッキーはクッキーをセットしたサーバーにのみ送信されます。しかし、複数のサーバーにクッキーを送信したい場合は、Domain属性を設定することができます。ただし、不用意に多くのサーバーを指定すると、セキュリティ上の問題を引き起こす可能性があるため、注意が必要です。

Path

Path属性は、クッキーが有効なURLのパスを指定します。指定されたパスのページ、およびその下の階層のページでのみ、クッキーは送信されます。

Expires

Expires属性は、クッキーの有効期限を設定します。指定された日時を過ぎると、クッキーは自動的に削除されます。この属性が設定されていない場合、クッキーはブラウザが閉じられるとすぐに削除される「セッションクッキー」になります。

Secure

Secure属性は、クッキーの送信をHTTPSを用いた通信に限定できます。この属性が設定されているクッキーは、安全な接続(HTTPS)を使用しているときにのみブラウザからサーバーに送信されます。これにより、クッキー情報の盗聴を防ぐことができます。

HttpOnly

HttpOnly属性をクッキーに設定すると、JavaScriptからクッキーの値にアクセスできなくなります2。これにより、クロスサイトスクリプティングXSS)攻撃によるクッキー情報の盗み出しを防ぐことができます

SameSite

SameSite属性は、クッキーが送信されるべき状況を制御するための比較的新しい属性です。この属性には主に3つの値があります。

「None」はこれまでのクッキーの挙動通り、全てのcross-siteなリクエストに対してクッキーが付与されます。

「Strict」same-siteに対するリクエストにのみクッキーが付与されます。これはCSRF攻撃に対して有効ですが、ユーザーはcross-siteなサイトからログインした状態で遷移できないため、ユーザーは再度ログイン処理や再読み込み処理が必要となります。

「Lax」NoneとStrictの間に位置するような指定です。cross-siteを含むページ遷移のようなトップレベルのナビゲーションと、same-siteのスクリプトや画像などのサブリソースに対するアクセスに対してのみクッキーが付与されます。つまり、ログインした状態で遷移できます。ただし、POSTメソッドのようなunsafeなHTTPメソッドによるcross-siteなトップレベルのナビゲーションに対してクッキーが付与されないため、POSTメソッドなどを使ったフォームのサブミットに対するCSRF攻撃に対して有効です。

セッション


ユーザーが行う一連の動作(ログイン〜ログアウト)を指します。セッションはユーザーのアクション履歴や、処理状況などを管理することができます。

クッキーを使ってセッション管理を行うことで、HTTP通信の「ステートレス」という性質を克服して、状態を保持できるようになります。


ここまでです。
読んでいただきありがとうございました