データの検証 = データが適切な形式であるかどうかを判断します。
データのサニタイズ = データから不正な文字を削除します。
PHPフィルター拡張機能
PHPフィルターは、外部入力の検証とサニタイズに使用されます。
PHPフィルター拡張機能には、ユーザー入力のチェックに必要な多くの関数があり、データの検証をより簡単かつ迅速に行えるように設計されています。
filter_list()
関数を使用して、PHPフィルター拡張機能が提供するものを一覧表示できます。
例
<table >
<tr >
<td > Filter Name</td >
<td > Filter ID</td >
</tr >
<?php
foreach (filter_list() as $id =>$filter) {
echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) . '</td></tr>';
}
?>
</table >
自分で試してみる »
フィルターを使用する理由
多くのWebアプリケーションは外部入力を受け取ります。外部入力/データは次のとおりです。
フォームからのユーザー入力
Cookie
Webサービスデータ
サーバー変数
データベースクエリの結果
常に外部データを検証する必要があります。 送信されたデータが無効であると、セキュリティ上の問題が発生し、Web ページが破損する可能性があります。PHPフィルターを使用すると、アプリケーションが正しい入力を確実に取得できます。
PHP filter_var()関数
filter_var()
データの検証とサニタイズの両方に機能します。
filter_var()
関数は、指定されたフィルターで単一の変数をフィルター処理します。次の2つのデータが必要です。
文字列をサニタイズする
次の例では、filter_var()
文字列からすべての HTMLタグを削除する関数:
例
<?php
$str = "<h1>Hello World!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
?>
自分で試してみる »
整数を検証する
次の例では、filter_var()
変数$intが整数かどうかをチェックする関数。 $intが整数の場合、以下のコードの出力は「整数は有効です」になります。 $intが整数でない場合、出力は次のようになります: "Integer is not valid":
例
<?php
$int = 100;
if (!filter_var($int, FILTER_VALIDATE_INT) === false) {
echo("Integer is valid");
} else {
echo("Integer is not valid");
}
?>
自分で試してみる »
ヒント: filter_var()と0の問題
上記の例で、$intが0に設定されている場合、上記の関数は「整数は無効です」を返します。この問題を解決するには、次のコードを使用します。
例
<?php
$int = 0;
if (filter_var($int, FILTER_VALIDATE_INT) === 0 || !filter_var($int, FILTER_VALIDATE_INT) === false) {
echo("Integer is valid");
} else {
echo("Integer is not valid");
}
?>
自分で試してみる »
IPアドレスを検証する
以下の例では、filter_var()
関数を使用して、変数$ipが有効なIPアドレスであるかどうかをチェックしています。:
例
<?php
$ip = "127.0.0.1";
if (!filter_var($ip, FILTER_VALIDATE_IP) === false) {
echo("$ip is a valid IP address");
} else {
echo("$ip is not a valid IP address");
}
?>
自分で試してみる »
メールアドレスのサニタイズと検証
次の例では、filter_var()
関数を使用して、まず$email変数から不正な文字をすべて削除し、次に有効なメールアドレスかどうかをチェックします:
例
<?php
$email = "john.doe@example.com";
// Remove all illegal characters from email
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
// Validate e-mail
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo("$email is a valid email address");
} else {
echo("$email is not a valid email address");
}
?>
自分で試してみる »
URLのサニタイズと検証
次の例では、filter_var()
最初にURLからすべての不正な文字を削除し、次に$urlが有効なURLであるかどうかを確認する関数:
例
<?php
$url = "https://www.w3schools.com";
// Remove all illegal characters from a url
$url = filter_var($url, FILTER_SANITIZE_URL);
// Validate url
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
echo("$url is a valid URL");
} else {
echo("$url is not a valid URL");
}
?>
自分で試してみる »
完全なPHPフィルターリファレンス
すべてのフィルタ関数の完全なリファレンスについては、PHPフィルタリファレンス の各フィルタをチェックして、利用可能なオプションとフラグを確認してください。
リファレンスには、各機能の簡単な説明と使用例が含まれています。