スーパーグローバルは、あらゆるスコープで自動的に利用可能なPHP組み込み変数です。リクエストデータ、サーバー情報、セッションなどを保持します。PHPスクリプトが受け取るHTTPリクエスト情報にアクセスする方法です。
主なスーパーグローバル
これらはどこでも利用可能です(globalキーワードは不要)。通常の変数はその関数にスコープが限定されるのと異なります。
// query parameters and form data
$id = $_GET['id'] ?? null; // ?? provides a default if missing
$username = $_POST['username'] ?? '';
// request info
$method = $_SERVER['REQUEST_METHOD']; // "GET", "POST"
$uri = $_SERVER['REQUEST_URI'];
$ip = $_SERVER['REMOTE_ADDR'];
// ❌ DANGEROUS — using raw input directly enables attacks
$query = "SELECT * FROM users WHERE id = " . $_GET['id']; // SQL INJECTION!
echo $_GET['name']; // XSS!
// ✅ ALWAYS validate, sanitize, and escape user input
$id = (int) $_GET['id']; // cast/validate
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); // parameterized query
echo htmlspecialchars($_GET['name']); // escape for output (prevent XSS)
$_GET、$_POST、$_COOKIE、$_REQUESTからのデータは信頼できないユーザー入力です — 直接使用するとSQLインジェクション、XSS、その他の攻撃が可能になります。常に検証し、データベースは確認問題なしクエリを使用し、出力をエスケープしてください。
スーパーグローバルはPHP Webアプリケーション開発の基本です。スクリプトがHTTPリクエストデータ(クエリ文字列、フォーム送信、クッキー、セッション、アップロードされたファイル、サーバー情報)を受け取る方法なので、ユーザー入力を処理するための必須の日常知識です。
各スーパーグローバル($_GET、$_POST、$_SERVER、$_SESSIONなど)が何を含むのか、またリクエストデータにアクセスする方法を理解することは、PHPアプリケーションを構築するために必要です。
しかし最も重要なポイントはセキュリティです:$_GET/$_POST/$_COOKIE/$_REQUESTからのデータは信頼できないユーザー入力であり、直接使用することは最も一般的で危険なWebの脆弱性(SQLインジェクション、XSS)の根本原因です。
スーパーグローバルリクエストデータが常に検証され、安全に使用され(データベースのパラメータ化クエリ)、出力でエスケープされなければならないことを理解することは、重大で必須のセキュリティ知識です。スーパーグローバルはユーザー入力の入口であり、それらの誤った処理がPHPセキュリティ侵害の多くの原因であるため、安全な処理はすべてのPHP開発者の基本的責任です。(Laravelのようなモダンフレームワークはスーパーグローバルをより安全なリクエスト抽象化でラップしますが、入力を信頼しないという根本原則は変わりません。)