PHPフィルター
データの検証=データが適切な形式であるかどうかを判断します。
データのサニタイズ=データから不正な文字を削除します。
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アプリケーションは外部入力を受け取ります。外部入力/データは次のとおりです。
- フォームからのユーザー入力
- クッキー
- 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が整数でない場合、出力は次のようになります。「整数が無効です」:
例
<?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 = "[email protected]";
// 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フィルターリファレンスを参照してください。各フィルターをチェックして、使用可能なオプションとフラグを確認してください。
リファレンスには、各関数の簡単な説明と使用例が含まれています。