PHP フィルターは、ユーザー入力などの安全でないソースからのデータを検証およびフィルターするために使用されます。
PHP フィルターは、安全でないソースからのデータを検証およびフィルターするために使用されます。
ユーザー入力またはカスタム データのテスト、検証、フィルタリングは、Web アプリケーションの重要な部分です。
PHP のフィルター拡張機能は、データのフィルター処理をより簡単かつ高速にするように設計されています。
ほとんどすべての Web アプリケーションは外部入力に依存します。通常、このデータはユーザーまたは他のアプリケーション (Web サービスなど) から取得されます。フィルターを使用すると、アプリケーションが正しい入力タイプを取得できるようになります。
常に外部データをフィルタリングする必要があります。
入力フィルタリングは、アプリケーションのセキュリティに関する最も重要なトピックの 1 つです。
外部データとは何ですか?
フォームからデータを入力
クッキー
Webサービスデータ
サーバー変数
データベースクエリの結果
変数をフィルターするには、次のいずれかのフィルター関数を使用します。
filter_var() - 指定されたフィルターを通じて単一の変数をフィルター処理します
filter_var_array() - 同じまたは異なるフィルターで複数の変数をフィルターします。
filter_input - 入力変数を受け取り、それをフィルタリングします
filter_input_array - 複数の入力変数を受け取り、同じまたは異なるフィルターを通してそれらをフィルター処理します。
次の例では、filter_var() 関数を使用して整数を検証します。
<?php $int = 123 ; if ( ! filter_var ( $int , FILTER_VALIDATE_INT ) ) { echo ( 「有効な整数ではありません」 ) }それ以外{ echo ( 「は有効な整数です」 ) } ?>
上記のコードは、「FILTER_VALIDATE_INT」フィルターを使用して変数をフィルター処理します。
整数以外の変数 (「123abc」など) を使用しようとすると、「整数が無効です」という出力が表示されます。
関数とフィルターの完全なリストについては、PHP フィルター リファレンス マニュアルを参照してください。
フィルターには次の 2 種類があります。
フィルターを検証しています:
ユーザー入力を検証するために使用されます
厳密なフォーマット規則 (URL や電子メールの検証など)
成功した場合は期待されるタイプを返し、失敗した場合は FALSE を返します。
除菌フィルター:
文字列内の指定された文字を許可または禁止するために使用されます
データ形式の規則はありません
常に文字列を返します
オプションとフラグは、指定されたフィルターに追加のフィルター オプションを追加するために使用されます。
フィルターが異なれば、オプションとフラグも異なります。
次の例では、「min_range」および「max_range」オプションを指定した filter_var() を使用して整数を検証します。
<?php $var = 300 $ int_options =配列( "オプション" =>配列 ( " min_range " => 0 、 " max_range " => 256 ) ) ; if ( ! filter_var ( $var , FILTER_VALIDATE_INT , $int_options ) ) { echo ( 「有効な整数ではありません」 ) }それ以外{ echo ( 「は有効な整数です」 ) } ?>
上記のコードと同様に、オプションは「options」と呼ばれる関連配列に入れる必要があります。フラグを使用する場合、フラグを配列にする必要はありません。
整数は「300」であり、指定された範囲内にないため、上記のコードの出力は次のようになります。
は正当な整数ではありません
関数とフィルターの完全なリストについては、PHP フィルター リファレンス マニュアルを参照してください。各フィルターで使用可能なオプションとフラグを確認できます。
フォームからの入力を検証してみましょう。
最初に行う必要があるのは、探している入力データが存在することを確認することです。
次に、filter_input() 関数を使用して入力データをフィルタリングします。
次の例では、入力変数「email」が PHP ページに渡されます。
<?php if ( ! filter_has_var ( INPUT_GET , " email " ) ) { echo ( 「電子メールパラメータなし」 ) }それ以外{ もし( ! filter_input ( INPUT_GET , "電子メール" , FILTER_VALIDATE_EMAIL ) ) { エコー"有効な電子メールではありません" ; それ以外 { エコー"正規の電子メールです" ; } ?>
上の例には、「GET」メソッド経由で渡される入力変数 (電子メール) があります。
「GET」タイプの「email」入力変数があるかどうかを確認します。
入力変数が存在する場合は、それが有効な電子メール アドレスであるかどうかを確認します
フォームから渡された URL をクリーンアップしてみましょう。
まず、探している入力データが存在することを確認します。
次に、filter_input() 関数を使用して入力データを精製します。
次の例では、入力変数「url」が PHP ページに渡されます。
<?phpif(!filter_has_var(INPUT_GET, "url")){ echo("URL パラメーターがありません");}else{ $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url;}?>
上の例には、「GET」メソッド経由で渡された入力変数 (URL) があります。
「GET」タイプの「url」入力変数があるかどうかを確認します。
この入力変数が存在する場合は、それをサニタイズ (不正な文字を削除) し、$url 変数に格納します。
入力変数が「http://www.ruåånoøøob.com/」のような文字列の場合、サニタイズされた $url 変数は次のようになります。
通常、フォームは複数の入力フィールドで構成されます。 filter_var または filter_input 関数の繰り返し呼び出しを避けるために、filter_var_array または filter_input_array 関数を使用できます。
この例では、filter_input_array() 関数を使用して 3 つの GET 変数をフィルターします。受信する GET 変数は、名前、年齢、電子メール アドレスです。
<?php $filters =配列( "名前" =>配列 ( "フィルター" => FILTER_SANITIZE_STRING ) , " age " =>配列 ( "フィルター" => FILTER_VALIDATE_INT 、 "オプション" =>配列 ( " min_range " => 1 、 " max_range " => 120 ) ) 、 「メール」 => FILTER_VALIDATE_EMAIL ) ; $ result =フィルター入力配列( INPUT_GET , $フィルター) ; ( ! $result [ "年齢" ] ) { echo ( "年齢は 1 ~ 120 歳でなければなりません。 <br> " ) ; elseif ( ! $result [ " email " ] ) { echo ( "電子メールは不正です<br> " ) ;それ以外{ echo ( 「正しい入力」 ) } ?>
上の例には、「GET」メソッド経由で渡される 3 つの入力変数 (名前、年齢、電子メール) があります。
入力変数の名前を含む配列を設定し、指定された入力変数をフィルターします。
filter_input_array() 関数を呼び出します。パラメータには GET 入力変数と設定したばかりの配列が含まれます
$result 変数の "age" 変数と "email" 変数に不正な入力がないか確認してください。 (不正な入力がある場合、filter_input_array() 関数の使用後、入力変数は FALSE になります。)
filter_input_array() 関数の 2 番目の引数には、配列または単一フィルターの ID を指定できます。
このパラメーターが単一フィルターの ID である場合、指定されたフィルターは入力配列内のすべての値をフィルター処理します。
パラメータが配列の場合、配列は次の規則に従う必要があります。
配列のキーである入力変数 (「年齢」入力変数など) を含む連想配列である必要があります。
この配列の値は、フィルターの ID、またはフィルター、フラグ、オプションを指定する配列である必要があります。
FILTER_CALLBACK フィルターを使用すると、カスタム関数を呼び出してフィルターとして使用できます。このようにして、データのフィルタリングを完全に制御できます。
独自のカスタム関数を作成することも、既存の PHP 関数を使用することもできます。
指定したオプションと同様に、使用するフィルター関数を指定します。 「options」という名前の連想配列内。
次の例では、カスタム関数を使用してすべての「_」を「.」に変換します。
<?php関数ConvertSpace ( $string ) { 戻るstr_replace ( " _ " 、 " . " 、 $ string ) ; $string = " www_codercto_com ! " ; filter_var ( $string , FILTER_CALLBACK , array ( " options " = > " convertSpace " ) ) ;
上記の例では、すべての「_」を「.」に変換します。
「_」を「.」に置き換える関数を作成します。
FILTER_CALLBACK フィルターと関数を含む配列を使用して、filter_var() 関数を呼び出します。