Warum muss ich nach der Umleitung über den Header ('Location ..') in PHP 'exit' aufrufen?
Wissen Sie, dass wenn Sie umleiten möchten einen Benutzer in PHP können Sie die header-Funktion:
header('Location: http://smowhere.com');
Es ist auch bekannt, dass es eine gute Praxis zu legen, auch eine exit;
nach der header
anrufen, um zu verhindern, dass die Ausführung von anderen php-code. Also meine Frage ist: könnte der code nach dem header-Lage Anruf effektiv ausgeführt? In welchen Fällen? Kann ein böswilliger Benutzer in der Lage sein, vollständig zu ignorieren, die header('Location..')
nennen? Wie?
InformationsquelleAutor der Frage Nicolò Martini | 2010-04-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, immer. Die
header
ist nur eine Zeile von Daten Fragen den browser umleiten. Der rest der Seite wird immer noch serviert werden von PHP und können angeschaut werden, indem der client einfach durch die Verhinderung derheader
Befehl ausführen.Dass ist einfach genug zu tun mit einem Kommandozeilen-client wie
wget
zum Beispiel, indem Sie einfach sagen, es nicht zu befolgen leitet.Bottom line:, Wenn Sie nicht verhindern, PHP senden den ganzen Körper auch nach einer
header
nennen. Dieser Körper ist vollständig zur Verfügung der Empfänger ohne Besondere Hacker-Fähigkeiten.InformationsquelleAutor der Antwort Pekka 웃
Wenn Sie umleiten, aber nicht
die()
/exit()
der code wird immer ausgeführt und angezeigt.Nehmen Sie das folgende Beispiel:
admin.php:
Wenn Sie nicht, stellen Sie sicher, Ende der Ausführung nach der location-header jeder Benutzer wird zugreifen.
InformationsquelleAutor der Antwort Alix Axel
header()
weist PHP einen HTTP-header gesendet werden soll... Wenn die HTTP-Header gesendet werden.Und diese nicht sofort gesendet, wenn Sie schreiben, die den Aufruf von header(), aber wenn es Zeit, Sie zu senden (in der Regel, wenn PHP muss, beginnt mit dem senden der Text der Antwort-das könnte später sein, als Sie denken, wenn
output_buffering
ist enabed).So, wenn Sie rufen einfach
header()
gibt es überhaupt ne Garantie, dass der code geschrieben, nachdem Sie diese Anweisung wird nicht ausgeführt-es sei denn, Sie zeigen, dass muss es nicht, durch die Verwendungexit
/die
.Kann der Benutzer ignoriert
Location
header, wenn er will ; aber es wird sich nichts ändern an der Tatsache, dass der code nach dem Aufruf vonheader()
möglicherweise oder möglicherweise nicht ausgeführt werden : dass die Materie der server-Seite.InformationsquelleAutor der Antwort Pascal MARTIN
PHP-Code nach einem header() ausgeführt wird. Manchmal, das erforderlich ist, obwohl, wie die Beispiel auf php.net zeigt. Um sicherzustellen, dass es nicht der Fall ist, beenden Sie das Programm fließen vollständig.
InformationsquelleAutor der Antwort Alister Bulman
re: konnte den code nach dem header-Lage Anruf effektiv ausgeführt?
Ja, wenn Sie nicht schließen Sie das Skript.
re: In welchen Fällen?
In jedem Fall.
Kann ein böswilliger Benutzer in der Lage sein komplett zu ignorieren den header('Location..') nennen?
Nein, es wird ergötzt, der Nutzer hat kein Mitspracherecht in der Angelegenheit.
InformationsquelleAutor der Antwort Steven smethurst
Ohne die exit-Aufruf, den genauen Punkt/Zeit, zu der Ihr Skript beendet wird, kommen auf zwei Faktoren:
Sagen wir, der browser beginnt SOFORT mit der redirect action in dem moment sieht die Location-header durch kommen. Das bedeutet, es wird heruntergefahren die Verbindung, aus denen der redirect kommt, so kann er beginnen, den Anschluss an den neuen Speicherort. Dies bedeutet in der Regel der web-server wird beendet das Skript umleiten. Egal wie lange es dauert für den header, um zu gehen von server->client-und die TCP-Verbindung shutdown-Prozess zu gehen, der von client->server ist die Zeit, in der Ihr Skript laufen lassen können.
InformationsquelleAutor der Antwort Marc B