情報処理安全確保支援士 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

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

