第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)