Start · Sprachen · PHP · Referenz · $_REQUEST

$_REQUEST

Superglobal

Enthält die zusammengeführten Inhalte von <code>$_GET</code>, <code>$_POST</code> und <code>$_COOKIE</code> – alle Daten, die vom Client im HTTP-Request übermittelt wurden.

seit PHP 4.1.0 Kategorie: http

Signatur

array $_REQUEST

Beschreibung

$_REQUEST ist eine superglobale Variable, die PHP automatisch beim Start jedes Skripts befüllt. Sie vereint die Eingaben aus $_GET, $_POST und $_COOKIE in einem einzigen assoziativen Array. Die Reihenfolge, in der Konflikte zwischen den Quellen aufgelöst werden (d. h. welche Quelle bei gleichem Schlüsselnamen gewinnt), wird durch die php.ini-Direktive request_order (ab PHP 5.3) bzw. variables_order gesteuert.

Der praktische Nutzen von $_REQUEST liegt darin, Formulare oder API-Endpunkte zu schreiben, die sowohl per GET als auch per POST aufgerufen werden können, ohne den Zugriffscode zu duplizieren. In vielen modernen Projekten wird jedoch bevorzugt, explizit auf $_GET oder $_POST zuzugreifen, um die Herkunft der Daten klar zu machen.

Wie alle Eingaben aus dem HTTP-Request dürfen die Werte in $_REQUEST niemals ohne vorherige Validierung und Bereinigung weiterverwendet werden. Besonders bei der Ausgabe in HTML (XSS) oder bei Datenbankabfragen (SQL-Injection) ist größte Vorsicht geboten. $_COOKIE-Daten in $_REQUEST sind zudem clientseitig manipulierbar.

Ab PHP 5.3 kann durch Setzen von request_order = "GP" in der php.ini der Cookie-Anteil vollständig aus $_REQUEST ausgeschlossen werden, was die Sicherheit erhöht, da Cookies vom Client beliebig gesetzt werden können.

Beispiele

Formularwert unabhängig von GET oder POST auslesen

<?php
// Funktioniert unabhängig davon, ob das Formular mit method="get" oder method="post" abgesendet wurde
$username = $_REQUEST['username'] ?? '';

// Eingabe bereinigen, bevor sie weiterverwendet wird
$username = htmlspecialchars(trim($username), ENT_QUOTES, 'UTF-8');

if ($username !== '') {
    echo 'Hallo, ' . $username . '!';
} else {
    echo 'Kein Benutzername übermittelt.';
}
Hallo, Max Mustermann!

Explizite Quellenprüfung als sicherere Alternative

<?php
// Besser: gezielt auf die erwartete Quelle prüfen
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $search = $_POST['q'] ?? '';
} else {
    $search = $_GET['q'] ?? '';
}

$search = htmlspecialchars(trim($search), ENT_QUOTES, 'UTF-8');
echo 'Suchanfrage: ' . $search;

// Im Gegensatz dazu die kürzere, aber weniger explizite Variante:
$search2 = htmlspecialchars(trim($_REQUEST['q'] ?? ''), ENT_QUOTES, 'UTF-8');
echo PHP_EOL . 'Über $_REQUEST: ' . $search2;
Suchanfrage: PHP lernen Über $_REQUEST: PHP lernen

Konfigurationseinfluss von request_order demonstrieren

<?php
// In php.ini: request_order = "GPC" (Standard)
// Bei gleichnamigem Schlüssel gewinnt die zuletzt gelistete Quelle (hier: Cookie)

// Simulationsbeispiel – im echten Request würden GET/POST/Cookie konkurrieren:
// GET:    q=from_get
// POST:   q=from_post
// Cookie: q=from_cookie

// Mit request_order="GPC" enthält $_REQUEST['q'] den Cookie-Wert.
// Mit request_order="GP" ist keine Cookie-Überschreibung möglich.

$value = $_REQUEST['q'] ?? 'nicht vorhanden';
echo 'Wert aus $_REQUEST: ' . htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
Wert aus $_REQUEST: nicht vorhanden

// Wichtig · Fallstricke

Sicherheitshinweis: Da $_REQUEST Daten aus mehreren Quellen kombiniert – darunter vom Client vollständig kontrollierbare Cookies –, ist die Herkunft eines Wertes nicht eindeutig nachvollziehbar. In sicherheitskritischen Anwendungen sollte immer $_POST oder $_GET direkt verwendet werden, um die Angriffsfläche zu reduzieren.

  • XSS: Alle Werte müssen vor der HTML-Ausgabe mit htmlspecialchars() escaped werden.
  • SQL-Injection: Niemals rohe $_REQUEST-Werte in SQL-Abfragen einsetzen – stets Prepared Statements verwenden.
  • Cookie-Konflikt: Cookies können durch den Client manipuliert werden und dürfen GET- oder POST-Werte in $_REQUEST überschreiben (abhängig von request_order).
  • In der php.ini kann mit request_order = "GP" der Cookie-Anteil entfernt werden (empfohlen).