19 Stimmen

PHP bereinigt Benutzerdaten für die Verwendung in der Funktion header()

Gibt es irgendwelche Escape-Routinen, die mit den Benutzerdaten gemacht werden müssen, damit sie in PHPs header()-Funktion verwendet werden können?
Z.B. für MySQL führe ich mysql_real_escape_string() über Benutzerdaten aus, bevor ich sie an die DB sende, und für die Ausgabe in HTML führe ich htmlspecialchars() aus... beides verpackt in meiner eigenen benutzerdefinierten Funktion, um zunächst eine andere Verarbeitung durchzuführen.

Aber was muss für die PHP-Funktion header() getan werden? Gibt es irgendwelche gefährlichen Zeichen, die ich vermeiden sollte?

Ich versuche, so etwas zu tun... Anhängen der Abfragezeichenfolge an einen Header() Redirect auf eine andere Seite

if ( strlen($_SERVER['QUERY_STRING']) > 0) {
$query_string = '?'.$_SERVER['QUERY_STRING'];
}
header('Location: http://domain.com/activate.php'.$query_string);
exit();

Hat jemand irgendwelche Informationen darüber, was für die Funktion header() escaped werden muss? Doppelpunkt und Semikolon scheinen bei header()-Anweisungen immer sehr wichtig zu sein. Sollte ich diese escapen?

19voto

ircmaxell Punkte 159431

Nein, es gibt nichts, was Sie tun müssen, um sich zu schützen, solange Sie PHP >= 4.4.2 (wenn Sie PHP4 verwenden) und >= 5.1.2 (wenn Sie PHP5 verwenden) einsetzen.

Ver die Dokumente für header() . Konkret:

Diese Funktion verhindert nun, dass mehr als ein Header auf einmal gesendet wird, um Angriffe durch Header-Injection zu verhindern.

Es gibt also keinen Grund, vor irgendetwas zu fliehen. für eine Standortüberschrift . Wenn Sie eine frühere Version verwenden, müssen Sie alle \r y \n Zeichen (um Header-Injection zu verhindern).

Auch, nicht urlencode die Abfragezeichenfolge. Dadurch wird die semantische Bedeutung der gesendeten Daten zerstört. Fügen Sie ihn einfach vollständig an.

1voto

Shoe Punkte 72596

Es könnten dort einige Exploits verwendet werden, wie z.B. das Senden von mehreren Headern, obwohl dies bei PHP5.1 von PHP selbst verhindert wird, wie hier berichtet wird:

4.4.2 und 5.1.2: Diese Funktion verhindert nun, dass mehr als ein Header auf einmal gesendet wird, um Angriffe auf Header-Injection zu verhindern.

Wenn Sie erwarten, dass ein Query-String an die Datei angehängt wird und Sie keine SEO-URLs verwenden, sollten Sie den Query-String validieren mit urlencode() die prüft, ob es sich bei der Zeichenkette um eine Abfragezeichenkette handelt oder nicht und ersetzt seltsame oder nicht erlaubte Zeichen durch entsprechende % y + .

Referenzen:

1voto

Josh Brown Punkte 893

Sie können auch Folgendes verwenden http_build_query um ein zugehöriges Array in die Abfragezeichenfolge zu konvertieren.

<?php
    $data = array('foo'=>'bar',
          'baz'=>'boom',
          'cow'=>'milk',
          'php'=>'hypertext processor');

    echo http_build_query($data) . "\n";
?>

Das obige Beispiel wird ausgegeben:

foo=bar&baz=boom&cow=milk&php=hypertext+processor

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X