😸

【PHP】サーバー側でのパラメータ取得方法

に公開

はじめに

GETメソッドやPOSTメソッドによって、URLやリクエストボディでサーバーにパラメータを送信できることは理解できたけど、実際にサーバーは送られてきたパラメータをどうやって受け取るか疑問に思ったことはありませんか?
本記事では、PHPを例に、サーバー側でのパラメータ取得の方法について、まとめていきます。

PHPで扱う主なパラメータの種類一覧

パラメータとは、リクエストによってサーバーに送られてくるデータのことを指します。

種類 説明
GET URLのクエリ文字列 /search.php?keyword=apple
POST フォームやAPIからの送信データ ログイン・会員登録
REQUEST GET + POST + COOKIEの合体版 全体を簡易的に確認
COOKIE ブラウザが送る保存情報 $_COOKIE['session_id']
FILES ファイルアップロード 画像などの受信

※上記の一覧表はChatGPTより引用

スーパーグローバル変数とは

PHPのスーパーグローバル変数とは、スクリプト全体からアクセス可能なグローバル変数のことです。通常、変数は関数やメソッドのスコープ内で定義され、そのスコープ外ではアクセスできません。
しかし、スーパーグローバル変数は、どこからでもアクセスできる特別な変数です。

ユーザーから送信されたパラメータの行方

PHPでは、ユーザーがHTTPリクエストを通じてサーバーに送信したパラメータは、スーパーグローバル変数に格納されます。これらの変数は、リクエストデータを簡単に扱うための特別なグローバル変数で、サーバー側でアクセス可能です。
つまり、HTTPリクエストを送信されると、サーバーはそのデータをスーパーグローバル変数に連想配列形式で格納します。これにより、どのスコープからでもアクセスが可能になります。

データを送信
<form method="POST" action="submit.php">
  <input type="text" name="username" value="akira">
  <input type="text" name="email" value="akira@example.com">
  <button type="submit">送信</button>
</form>
連想配列形式で管理
$_POST = [
  "username" => "akira",
  "email" => "akira@example.com"
];

そのため、パラメータのデータにアクセスしたい場合、該当するスーパーグローバル変数とそのキーとなる名前を指定する必要があります。

$email = $_POST['email'];  // 'akira@example.com' が格納される

ただし、ここにはユーザーが送信したデータがそのまま保存されるため、悪意のあるパラメータがある場合にはXSS(クロスサイトスクリプティング)やCSRF(クロスサイトリクエストフォージェリ)などといった攻撃が発生するリスクがあります。
そのため、htmlspecialchars() を使ったエスケープ処理や、CSRFトークンをフォームに埋め込むなどといった、それぞれに適した対策をスーパーグローバル変数を使うときに講じる必要があります。

まとめ

PHPではユーザーから送信されたパラメータ(データ)は、スーパーグローバル変数に連想配列形式で格納されます。しかし、ユーザーの入力内容がそのまま保存されるため、スーパーグローバル変数のデータを使用する際にはサニタイズやバリデーションといった対策を適切に講じる必要があります。

最後までお読みいただき、ありがとうございました。

参考URL

https://www.php.net/manual/ja/reserved.variables.post.php
http://phpglossary.com/what-are-php-super-global-variables-and-their-usage-in-php/
https://blog.eduonix.com/2014/10/php-superglobals/

Discussion