**슈퍼글로벌(superglobal)**은 모든 스코프에서 자동으로 사용 가능한 내장 PHP 변수입니다 — 요청 데이터, 서버 정보, 세션 등을 담고 있습니다. PHP 스크립트가 들어오는 HTTP 요청 정보에 접근하는 방식입니다.
주요 슈퍼글로벌
이들은 함수에 한정되는 일반 변수와 달리 어디서나 사용 가능합니다(global 키워드 불필요).
// 쿼리 매개변수와 폼 데이터
$id = $_GET['id'] ?? null; // ?? 는 없을 때 기본값을 제공
$username = $_POST['username'] ?? '';
// 요청 정보
$method = $_SERVER['REQUEST_METHOD']; // "GET", "POST"
$uri = $_SERVER['REQUEST_URI'];
$ip = $_SERVER['REMOTE_ADDR'];
// ❌ 위험 — 원시 입력을 직접 사용하면 공격이 가능해짐
$query = "SELECT * FROM users WHERE id = " . $_GET['id']; // SQL 인젝션!
echo $_GET['name']; // XSS!
// ✅ 항상 사용자 입력을 검증, 정화, 이스케이프할 것
$id = (int) $_GET['id']; // 캐스트/검증
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); // 매개변수화된 쿼리
echo htmlspecialchars($_GET['name']); // 출력 시 이스케이프 (XSS 방지)
$_GET, $_POST, $_COOKIE, $_REQUEST의 데이터는 신뢰할 수 없는 사용자 입력입니다 — 직접 사용하면 SQL 인젝션, XSS 등의 공격이 가능해집니다. 항상 검증하고, 데이터베이스에는 매개변수화된 쿼리를 사용하며, 출력을 이스케이프하세요.
슈퍼글로벌은 PHP 웹 개발의 근간입니다 — 스크립트가 HTTP 요청 데이터(쿼리 문자열, 폼 제출, 쿠키, 세션, 업로드 파일, 서버 정보)를 받는 방식이므로, 이를 이해하는 것은 모든 사용자 입력을 다루는 데 필수적인 일상 지식입니다.
각 슈퍼글로벌이 담는 내용($_GET, $_POST, $_SERVER, $_SESSION 등)과 요청 데이터에 접근하는 법을 아는 것은 모든 PHP 애플리케이션을 구축하는 데 필요합니다.
하지만 가장 중요한 점은 보안입니다. $_GET/$_POST/$_COOKIE/$_REQUEST의 데이터는 신뢰할 수 없는 사용자 입력이며, 이를 직접 사용하는 것이 가장 흔하고 위험한 웹 취약점(SQL 인젝션, XSS)의 근본 원인입니다.
슈퍼글로벌 요청 데이터는 항상 검증하고, 안전하게 사용하며(데이터베이스에는 매개변수화된 쿼리), 출력 시 이스케이프해야 함을 이해하는 것은 결정적이고 보안에 필수적인 지식입니다. 슈퍼글로벌은 사용자 입력의 진입점이므로 잘못 다루는 것이 심각한 PHP 보안 침해가 발생하는 지점이며, 이를 안전하게 다루는 것은 모든 PHP 개발자의 기초적인 책임입니다. (Laravel 같은 현대 프레임워크는 슈퍼글로벌을 더 안전한 요청 추상화로 감싸지만, 입력을 절대 신뢰하지 않는다는 근본 원칙은 여전히 유효합니다.)