Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】FILTER_SANITIZE_EMAIL定数の使い方

FILTER_SANITIZE_EMAIL定数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

FILTER_SANITIZE_EMAIL定数は、PHPの組み込みフィルター機能において、電子メールアドレスのサニタイズ処理を指定するための識別子を表す定数です。

この定数は、ユーザーからの入力データや外部から取得した情報に含まれる電子メールアドレスを、安全な形式に変換(サニタイズ)する際に利用されます。具体的には、filter_var()filter_input()といったPHPのフィルター関数と組み合わせて使用されます。

サニタイズ処理では、指定された文字列の中から、電子メールアドレスとして不適切と判断される文字、例えば制御文字、改行文字、あるいはウェブページに悪影響を与える可能性のある特殊記号などが自動的に除去され、クリーンな形式に整えられます。これにより、データの整合性を保ちつつ、データベースへの不正な挿入(SQLインジェクションなど)や、クロスサイトスクリプティング(XSS)のようなセキュリティ脆弱性を引き起こすリスクを低減します。

システムエンジニアを目指す方にとって、ユーザーからの入力データは常に信頼できないものとして扱い、適切なサニタイズ処理を施すことは、セキュアなアプリケーションを開発するための基本的な原則です。FILTER_SANITIZE_EMAIL定数を用いることで、電子メールアドレスに関するセキュリティ対策を容易かつ確実に行うことができ、アプリケーションの堅牢性を高める上で非常に重要な役割を果たします。

構文(syntax)

1<?php
2
3$input_email = "test<script>@example.com";
4$sanitized_email = filter_var($input_email, FILTER_SANITIZE_EMAIL);
5echo $sanitized_email;
6
7?>

引数(parameters)

引数なし

引数はありません

戻り値(return)

戻り値なし

戻り値はありません

サンプルコード

PHP: FILTER_SANITIZE_EMAIL でメールアドレスをサニタイズする

1<?php
2
3/**
4 * メールアドレス文字列をサニタイズするサンプル関数。
5 *
6 * FILTER_SANITIZE_EMAIL 定数を使用し、メールアドレスとして不適切な文字(空白、改行、HTMLタグなど)を除去します。
7 * これは入力されたメールアドレスを「安全な」形式にクリーニングすることを目的としており、
8 * メールアドレスの形式がRFCに厳密に従っているかを検証するものではありません。
9 */
10function sanitizeEmailExample(): void
11{
12    // サニタイズ処理を適用するメールアドレスの例
13    $emailAddress1 = "test@example.com";
14    $emailAddress2 = "  user@domain.com  \n"; // 前後の空白や改行を含む
15    $emailAddress3 = "test<email@host.org>"; // 不適切な文字や記号を含む
16    $emailAddress4 = "info@example.net<script>alert('xss');</script>"; // HTMLタグを含む
17
18    echo "--- メールアドレスのサニタイズ処理 ---" . PHP_EOL . PHP_EOL;
19
20    // 例1: 既に適切なメールアドレス
21    echo "元のメールアドレス: '" . $emailAddress1 . "'" . PHP_EOL;
22    $sanitizedEmail1 = filter_var($emailAddress1, FILTER_SANITIZE_EMAIL);
23    echo "サニタイズ後:    '" . $sanitizedEmail1 . "'" . PHP_EOL . PHP_EOL;
24
25    // 例2: 前後の空白と改行の除去
26    echo "元のメールアドレス: '" . str_replace(["\n", "\r"], ['\n', '\r'], $emailAddress2) . "'" . PHP_EOL; // 見やすいように改行文字を表示
27    $sanitizedEmail2 = filter_var($emailAddress2, FILTER_SANITIZE_EMAIL);
28    echo "サニタイズ後:    '" . $sanitizedEmail2 . "'" . PHP_EOL . PHP_EOL;
29
30    // 例3: 不適切な文字の除去
31    echo "元のメールアドレス: '" . $emailAddress3 . "'" . PHP_EOL;
32    $sanitizedEmail3 = filter_var($emailAddress3, FILTER_SANITIZE_EMAIL);
33    echo "サニタイズ後:    '" . $sanitizedEmail3 . "'" . PHP_EOL . PHP_EOL;
34
35    // 例4: HTMLタグの除去
36    echo "元のメールアドレス: '" . $emailAddress4 . "'" . PHP_EOL;
37    $sanitizedEmail4 = filter_var($emailAddress4, FILTER_SANITIZE_EMAIL);
38    echo "サニタイズ後:    '" . $sanitizedEmail4 . "'" . PHP_EOL . PHP_EOL;
39
40    echo "補足: FILTER_SANITIZE_EMAIL は文字列をクリーンアップしますが、" . PHP_EOL;
41    echo "メールアドレスとして有効であるかを検証するものではありません。" . PHP_EOL;
42    echo "検証には FILTER_VALIDATE_EMAIL を使用することを検討してください。" . PHP_EOL;
43}
44
45// 関数を実行して結果を表示
46sanitizeEmailExample();

PHPのFILTER_SANITIZE_EMAILは、filter_var関数と組み合わせて使用する定数です。この定数を使うことで、入力されたメールアドレス文字列から、空白、改行、HTMLタグ、その他のメールアドレスとして不適切と判断される文字などを除去し、安全な形式に整形する「サニタイズ(無害化)」処理が行われます。これは、ウェブアプリケーションにおいて、ユーザーからの入力をデータベースに保存したり表示したりする前に、潜在的なセキュリティリスク(例えばクロスサイトスクリプティングなど)を防ぐために利用される重要な処理です。

サンプルコードでは、前後に空白や改行が含まれる文字列、不適切な記号やHTMLタグを含む文字列が、FILTER_SANITIZE_EMAIL定数によってどのようにクリーニングされるかを示しています。具体的には、不要な空白や改行が除去されたり、悪意のある可能性のある<script>タグのようなHTML要素が取り除かれたりする様子を確認できます。

FILTER_SANITIZE_EMAIL自体は定数であるため、引数はなく、直接の戻り値もありません。この定数をfilter_var関数の第二引数として指定することで、その関数がサニタイズ処理を実行し、結果としてクリーニングされた文字列を返します。

ただし、このサニタイズ処理は文字列を「クリーンアップ」することを目的としており、その文字列が「有効なメールアドレスの形式」であるかを厳密に検証するものではない点に注意が必要です。メールアドレスの有効性を確認する場合には、FILTER_VALIDATE_EMAILなどの別の定数をfilter_var関数と組み合わせて使用することを検討してください。これにより、入力データの安全性を高めるとともに、データの整合性を保つことができます。

FILTER_SANITIZE_EMAIL は、メールアドレス文字列に含まれる空白、改行、HTMLタグなどの不適切な文字を取り除き、文字列を安全な形式に整形する機能です。この処理は、セキュリティ対策として入力データから潜在的な危険要素を除去することを目的としています。

最も重要な注意点は、この機能はあくまで文字列を「クリーンにする」ことが目的であり、その結果の文字列が「RFCに準拠した有効なメールアドレスであるか」を検証するものではない、という点です。したがって、入力されたメールアドレスが実際に有効な形式であるかを確認したい場合は、別途 FILTER_VALIDATE_EMAIL を利用して検証処理を行う必要があります。サニタイズと検証はそれぞれ異なる役割を持つため、両方を適切に組み合わせることで、より安全で信頼性の高い入力処理が実現できます。

関連コンテンツ