【PHP8.x】INPUT_GET定数の使い方
INPUT_GET定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
INPUT_GET定数は、PHPにおいてHTTP GETリクエストのデータを指し示す定数です。ウェブブラウザからウェブサーバーに送信されるURLの末尾に付加されるクエリ文字列(例えば、http://example.com/index.php?id=123&name=Alice の id=123&name=Alice の部分)に含まれるデータへのアクセスを示します。
この定数は、主にPHPのフィルター拡張機能で使用されるもので、特にfilter_input()関数やfilter_var_array()関数と組み合わせて利用されます。これらの関数とINPUT_GETを組み合わせることで、ウェブアプリケーションが受け取るGETリクエストのデータを安全かつ厳密に取得し、検証(バリデーション)や無害化(サニタイズ)を行うことが可能です。
$_GETスーパーグローバル変数も同じデータにアクセスできますが、filter_input()などのフィルター関数とINPUT_GETを組み合わせることで、入力データの型チェック、不正な文字の除去、特定の形式への変換などを、より体系的かつ安全に処理できます。これにより、SQLインジェクションやクロスサイトスクリプティング(XSS)といったセキュリティ上の脆弱性からアプリケーションを保護し、堅牢なシステムを構築するために非常に重要な役割を果たします。ユーザーからの入力を扱う際には、セキュリティとデータの正確性を確保するため、この定数とフィルター機能の利用が推奨されます。
構文(syntax)
1$value = filter_input(INPUT_GET, 'variable_name');
引数(parameters)
引数なし
引数はありません
戻り値(return)
戻り値なし
戻り値はありません
サンプルコード
PHPでGETリクエストから安全にinputを取得する
1<?php 2 3/** 4 * HTTP GETリクエストからパラメータを安全に取得する方法を示します。 5 * 6 * このコードをテストするには: 7 * 1. ファイルを `index.php` などのPHPファイル名で保存します。 8 * 2. ウェブブラウザで以下のURLにアクセスします。 9 * - `http://localhost/index.php?username=Alice` 10 * - `http://localhost/index.php?username=Bob` 11 * パラメータなしでアクセスする場合: 12 * - `http://localhost/index.php` 13 * XSS攻撃のテストとして: 14 * - `http://localhost/index.php?username=<script>alert('XSS')</script>` 15 */ 16function processGetRequest(): void 17{ 18 // INPUT_GET定数:$_GETスーパーグローバル配列から値を取得することを示します。 19 // filter_input()関数:外部から取得した変数を安全に取得し、フィルタリングするために使用されます。 20 // 'username':取得したいGETパラメータのキー(例:?username=value)。 21 // FILTER_SANITIZE_FULL_SPECIAL_CHARS:HTMLエンティティに変換することで、特殊文字をサニタイズし、 22 // ウェブページでの表示を安全にします。 23 $username = filter_input(INPUT_GET, 'username', FILTER_SANITIZE_FULL_SPECIAL_CHARS); 24 25 if (null !== $username && $username !== false) { 26 // 'username'パラメータが存在し、正常にサニタイズされた場合 27 echo "こんにちは、 " . $username . "さん!"; 28 } else { 29 // 'username'パラメータが提供されていない、またはフィルタリング後に空であった場合 30 echo "URLに 'username' パラメータを指定してください (例: ?username=YourName)。"; 31 } 32} 33 34// スクリプトが実行されたときに機能を呼び出します。 35processGetRequest(); 36 37?>
PHPのINPUT_GETは、HTTP GETリクエストを通じてウェブページに送られてくるデータ(URLのクエリパラメータ)を指し示すための定数です。この定数自体に引数や戻り値はありませんが、主にfilter_input()関数と組み合わせて使用され、外部からの入力を安全に取得する際に役立ちます。
サンプルコードでは、filter_input(INPUT_GET, 'username', FILTER_SANITIZE_FULL_SPECIAL_CHARS)という形で使われています。ここで、最初の引数であるINPUT_GETは「HTTP GETリクエストから値を取得する」という処理の対象を指定しています。2番目の引数'username'は、URLの?username=値のような形式で指定されるパラメータの名前です。3番目の引数FILTER_SANITIZE_FULL_SPECIAL_CHARSは、取得したデータに含まれるHTMLの特殊文字(例: <や>)を安全な形式に変換し、悪意のあるスクリプト実行(XSS攻撃)を防ぐためのフィルタリング処理を指定しています。
この定数とfilter_input()関数を組み合わせることで、指定されたGETパラメータを安全に取得し、その値が存在すれば「こんにちは、[ユーザー名]さん!」と表示し、存在しない場合はパラメータの指定を促すメッセージを表示します。INPUT_GETを利用することは、$_GETスーパーグローバル変数を直接参照するよりも、より堅牢で安全な方法でユーザーからの入力を処理することにつながります。
INPUT_GETはURLのGETパラメータを安全に扱うための定数です。サンプルコードではfilter_input()関数と組み合わせることで、より安全なデータ取得を実現しています。外部からの入力は常に悪意のあるデータが含まれる可能性があるため、そのまま使用せず、必ずfilter_input()のような関数でフィルタリング(サニタイズ)してください。特にFILTER_SANITIZE_FULL_SPECIAL_CHARSは、HTML特殊文字を変換することでクロスサイトスクリプティング(XSS)攻撃からウェブページを保護するために不可欠です。また、filter_input()の戻り値がnullやfalseでないかを常に確認し、パラメータが期待通りに処理されたかを検証する習慣をつけましょう。これらは安全なウェブアプリケーション開発の基本となります。
PHPでGETパラメータを取得する
1<?php 2 3/** 4 * HTTP GETリクエストから指定されたパラメータの値を取得し、安全に出力します。 5 * 6 * この関数は、filter_input() 関数と INPUT_GET 定数を使用して、 7 * GETパラメータを安全に取得する方法を示します。 8 * 取得した値は XSS (クロスサイトスクリプティング) 攻撃を防ぐために 9 * htmlspecialchars() でエスケープされます。 10 * 11 * 例: http://localhost/your_script.php?username=Alice&message=Hello%20World! 12 * 13 * @param string $paramName 取得したいGETパラメータの名前。 14 * @return void 15 */ 16function getAndDisplayGetParameter(string $paramName): void 17{ 18 // INPUT_GET 定数を使用して、GETリクエストから指定されたパラメータの値を取得します。 19 // filter_input() の第3引数 (フィルタ) を省略すると、デフォルトで FILTER_UNSAFE_RAW が適用されます。 20 // これにより、基本的な文字列として値が取得されます。 21 $value = filter_input(INPUT_GET, $paramName); 22 23 // 値が取得できたか、またはフィルタリングに失敗しなかったかを確認します。 24 // null はパラメータが存在しない場合、false はフィルタリングに失敗した場合を意味します。 25 if ($value === null || $value === false) { 26 echo "<p>GETパラメータ '<strong>" . htmlspecialchars($paramName, ENT_QUOTES, 'UTF-8') . "</strong>' は存在しないか、取得できませんでした。</p>\n"; 27 } else { 28 // XSS (クロスサイトスクリプティング) 攻撃を防ぐため、 29 // 出力する前に htmlspecialchars() で値をエスケープします。 30 $safeValue = htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); 31 echo "<p>GETパラメータ '<strong>" . htmlspecialchars($paramName, ENT_QUOTES, 'UTF-8') . "</strong>' の値: <code>{$safeValue}</code></p>\n"; 32 } 33} 34 35// このスクリプトがWebサーバーを介してアクセスされたことを想定します。 36// 例として 'username' と 'message' というGETパラメータの取得を試みます。 37// 38// 以下のURLでアクセスしてみてください: 39// http://localhost/your_script.php?username=Alice&message=Hello%20World! 40// (your_script.php はこのファイルの名前) 41 42echo "<h1>GETパラメータの取得と表示の例</h1>\n"; 43 44// 'username' パラメータを取得して表示 45getAndDisplayGetParameter('username'); 46 47// 'message' パラメータを取得して表示 48getAndDisplayGetParameter('message'); 49 50// 存在しないパラメータを試す 51getAndDisplayGetParameter('undefined_param'); 52 53?>
PHPのINPUT_GET定数は、Webブラウザから送信されるHTTP GETリクエストのデータを安全に取得するために使われる特別な値です。WebページのURLに?以降で付加される情報をGETパラメータと呼びますが、この定数はfilter_input()関数と組み合わせることで、指定したパラメータの値を取り出す指示として機能します。
サンプルコードでは、getAndDisplayGetParameter関数がfilter_input(INPUT_GET, $paramName)を使って、URLからusernameやmessageといった特定のGETパラメータの値を取得しています。例えば、http://localhost/your_script.php?username=AliceというURLでアクセスした場合、usernameの値としてAliceを取得できます。
取得した値は、悪意のあるスクリプトが混入する「XSS(クロスサイトスクリプティング)攻撃」を防ぐため、htmlspecialchars()関数で適切にエスケープ(特殊文字を無効化)してから画面に表示する安全対策も行っています。もし指定したパラメータが存在しない、または値の取得に失敗した場合は、その旨をユーザーに通知する処理も含まれており、堅牢なシステム開発に役立ちます。
INPUT_GET定数自体は引数を取らず、直接の戻り値もありません。しかし、filter_input()などの関数に渡すことで、「GETリクエストの入力データに対して操作を行う」という動作を指定する、非常に重要な役割を担っています。これにより、ユーザーからの入力を安全に処理する基盤となります。
INPUT_GETはHTTP GETリクエストのデータを示す定数で、filter_input関数と組み合わせて安全にGETパラメータを取得します。生の$_GET変数ではなくこの関数を使うことで、入力値の安全性を高めることができます。取得した値は、Webページに出力する前に必ずhtmlspecialchars()などでエスケープ処理し、XSS(クロスサイトスクリプティング)攻撃を防いでください。これはWebアプリケーション開発において非常に重要なセキュリティ対策です。filter_inputは、パラメータが存在しない場合はnull、取得に失敗した場合はfalseを返すため、これらの戻り値を適切に確認し、状況に応じて処理を分岐させることが大切です。サンプルコードは、URLのクエリ文字列から値を取得しますので、ブラウザで記載のURL形式を試して動作を確認してください。