情報処理安全確保支援士 2025年 春期 午前2 問20
問題文
Web ページ内の HTML フォームに入力されたデータが Web サーバに送られる際には、HTTP プロトコルの GET メソッド又は POST メソッドを用いたリクエストメッセージが使用される。このとき、入力されたデータはリクエストメッセージのどの部分に含まれるか。ここで、HTTP のバージョンは HTTP/1.1 とし、リクエストメッセージは、リクエスト行、ヘッダー、メッセージボディの順で構成されているものとする。

選択肢
ア:
イ:(正解)
ウ:
エ:
🔒 解説は解答すると表示されます
フォーム送信データの格納【午前2解説】
正解の理由
選択肢イが正しい理由は、HTTP/1.1 のリクエスト構成に基づき、GET メソッドではフォームデータがリクエスト行の URI(query string)に付加されるのに対し、POST メソッドではリクエストのメッセージボディに格納されるためです。具体的には、GET はリクエスト行のパス部分の末尾に
?key=value 形式のクエリ文字列を付けて送信し、POST はヘッダーに Content-Type や Content-Length を設定して、実際のフォームデータをメッセージボディに含めて送信します。なお、POST が「安全である」と断定するのは誤りです。POST はデータを URL に含めないため URL や参照元ヘッダ、サーバのログへの露出リスクは低くなりますが、通信経路の機密性(盗聴対策)は TLS(HTTPS)に依存します。
解法ステップ
- HTTP リクエストの構成(リクエスト行、ヘッダー、メッセージボディ)を確認する。
- GET と POST の一般的な振る舞いを思い出す:GET はクエリ文字列を使う、POST はボディを使う。
- 選択肢と照合する:GET → リクエスト行、POST → メッセージボディ となる組合せを選ぶ。
- セキュリティやヘッダーの役割を踏まえ、誤答を排除する(ヘッダーはフォームデータの本体を入れる場所ではない)。
選択肢別の誤答解説
- ア:GET がリクエスト行に格納される点は合っているが、POST をヘッダーに格納するとしているため誤り。ヘッダーはメタ情報(Content-Type など)を持つ場所で、フォームデータの本体は入らない。
- ウ:両方ともヘッダーに入るとするのは誤り。GET のデータは URI(リクエスト行)に、POST のデータはメッセージボディに入る。ヘッダーにフォームの本体が格納されることは通常ない。
- エ:GET をヘッダーに入れるとするのは誤り(GET はクエリ文字列としてリクエスト行に含まれる)。POST をメッセージボディに入れる点は正しいが、組合せとして間違い。
- 正答である イ:GET=リクエスト行(クエリ文字列)、POST=メッセージボディ、という正しい組合せ。
よくある誤解
- 「POST は安全」は誤り:POST は URL にデータを含めないため露出リスクは下がるが、通信内容の機密性は TLS(HTTPS)で確保する必要がある。
- 「ヘッダーにフォームデータを入れることがある」は誤り:ヘッダーはデータ形式や長さなどのメタ情報を表す場所で、フォーム本体はメッセージボディに入る(例外的な実装を除く)。
- 「GET にデータ量の制限はない」は不正確:仕様上は厳密な長さ制限はないが、ブラウザやサーバ、プロキシで URL 長の制限があり大きなデータ送信には不向き。
補足コラム
- フォーム送信の標準的な Content-Type:
- application/x-www-form-urlencoded:デフォルトのフォーム送信(名前=値のエンコード)
- multipart/form-data:ファイルアップロードなどバイナリを含む場合
- サーバ側の受け取り方の目安:
- GET → サーバはリクエスト行からクエリ文字列を解析してパラメータを得る。
- POST → ヘッダーの Content-Type を見てボディの解析方法を決め、メッセージボディからパラメータを抽出する。
- 実用上の選び方:
- 参照可能で副作用のない検索やページ遷移 → GET
- データ作成・更新や大きなデータ・ファイル送信 → POST
例:GET と POST のリクエスト(簡略)
# GET の例(クエリ文字列がリクエスト行に含まれる)
GET /search?q=情報&lang=ja HTTP/1.1
Host: example.com
User-Agent: ExampleAgent/1.0
# POST の例(フォームデータがメッセージボディに含まれる)
POST /submit HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
name=%E4%BE%8B&comment=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF
FAQ
Q1: GET にもメッセージボディを含められますか?
A1: HTTP/1.1 仕様では技術的にリクエストボディを持てるメソッドがあるが、GET にボディを含める慣習は一般的ではなく、多くのサーバやプロキシは無視するか処理が未定義です。フォーム送信の用途では GET はクエリ文字列を使います。
A1: HTTP/1.1 仕様では技術的にリクエストボディを持てるメソッドがあるが、GET にボディを含める慣習は一般的ではなく、多くのサーバやプロキシは無視するか処理が未定義です。フォーム送信の用途では GET はクエリ文字列を使います。
Q2: 大量のデータはどちらで送るべきですか?
A2: 大量データやファイルは POST(メッセージボディ)を使うのが適切です。URL 長制限やログ露出の観点からも POST が望ましいです。
A2: 大量データやファイルは POST(メッセージボディ)を使うのが適切です。URL 長制限やログ露出の観点からも POST が望ましいです。
Q3: 送信内容の機密性はどうすれば保てますか?
A3: HTTPS(TLS)を使ってリクエスト全体を暗号化する必要があります。POST を使うだけでは通信経路の機密性は保証されません。
A3: HTTPS(TLS)を使ってリクエスト全体を暗号化する必要があります。POST を使うだけでは通信経路の機密性は保証されません。
関連キーワード: HTTP、GET、POST、クエリ文字列、メッセージボディ、Content-Type、Content-Length、URLエンコード、multipart/form-data、リクエスト行、参照元ログ、TLS

\ せっかくなら /
情報処理安全確保支援士を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

