【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
Discussion