Superglobals 是内置的 PHP 变量,在每个作用域中自动可用 — 它们保存请求数据、服务器信息、会话等。这是 PHP 脚本访问传入 HTTP 请求信息的方式。
主要 superglobals
php
这些在任何地方都可用(不需要 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 和其他攻击。始终进行验证,对数据库使用参数化查询,并转义输出。
Superglobals 是 PHP Web 开发的基础 — 这是脚本接收 HTTP 请求数据(查询字符串、表单提交、cookies、会话、上传的文件、服务器信息)的方式,因此理解它们是处理任何用户输入的必要日常知识。
了解每个 superglobal 包含的内容($_GET、$_POST、$_SERVER、$_SESSION 等)以及如何访问请求数据对于构建任何 PHP 应用程序都是必要的。
但最重要的一点是安全性:来自 $_GET/$_POST/$_COOKIE/$_REQUEST 的数据是不受信任的用户输入,直接使用它是最常见和最危险的 Web 漏洞(SQL 注入、XSS)的根本原因。
理解 superglobal 请求数据必须始终进行验证、安全使用(数据库使用参数化查询)和输出转义,这是至关重要的安全知识 — 由于 superglobals 是用户输入的入口点,错误处理它们是许多严重 PHP 安全漏洞的源头,使得安全处理它们成为每个 PHP 开发人员的基本责任。(现代框架如 Laravel 在更安全的请求抽象中包装 superglobals,但永远不要信任输入的基本原则仍然成立。)