第11章 高度なプログラミング / 第4回 模擬試験

PHPのメールヘッダーインジェクションに関する次の記述のうち、正しいものはどれか。

メールヘッダーインジェクションは、改行コードを悪用してメールヘッダーに不正な内容を追加する攻撃である。 正解
メールヘッダーインジェクションはデータベースに対する攻撃の一種である。
メールヘッダーインジェクションはPHPでは原理的に発生し得ない。
メールヘッダーインジェクション対策には、入力値の改行コード除去が無関係である。
解説
メールヘッダーインジェクションは、フォームの入力欄(差出人名や件名など)に改行コード(` `)を混入させ、本来1行で完結するはずのメールヘッダーに、攻撃者が意図した`Bcc:`や`Cc:`などの追加ヘッダーを不正に挿入する攻撃です。これにより、意図しない大量送信(迷惑メールの踏み台)などの被害につながります。 他の選択肢が誤りである理由は次の通りです。 ・メールヘッダーインジェクションはメール送信機能(`mail()`関数など)に対する攻撃であり、データベースへの攻撃ではありません。 ・PHPの`mail()`関数などでユーザー入力をヘッダーに含める実装をしていれば、原理的に発生し得る攻撃です。「発生し得ない」は誤りです。 ・改行コードを悪用する攻撃であるため、入力値から改行コード(` `, ` `)を除去・検証することは有効な対策の1つです。「無関係」は誤りです。 例: ``` // 危険な例: $_POST['from'] に改行込みの値を入れられると追加ヘッダーを注入される $headers = "From: " . $_POST['from']; mail($to, $subject, $body, $headers); ``` (参照: 独習PHP 第4版 第11章 高度なプログラミング 11.2.5節 メールヘッダーインジェクション p.611〜613)