Header Info
Automatische Umleitung
Wie Redirection funktioniert
Die Datei header_redirect.php auf welche das Formular in der Datei header_form.php verwies, prüfte die Variable und leitete den Browser sofort (ohne sich selbst darzustellen) auf diese Seite weiter.
header("Location:header_info.php");
# keine Ausgabe an den Browser, keine HTML Tags,
# nicht einmal ein Leerschlag oder eine Leerzeile oberhalb dieses Scripts
$radio=$_POST[radio];
if ($radio == "info") {
// header("Location:http://www.lehrling.biefer.com/php/header_info.php");
header("Location:header_info.php");
exit;
} else {
// header("Location:http://lehrling.biefer.com/php/datei.php");
header("Location:datei.php");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
Falls keine Umleitung erfolgte (kein else), könnte danach normales HTML folgen.
</body>
Es kann wie oben eine relative oder es kann auch ein absoluter Pfad angegeben werden (letzteres wäre empfohlen).
Verbotene Umleitung
Umleitung in index Dateien
Möchte man alle Besucher eines gewissen Unterordners, welche nicht eine spezifische Datei in der Adresszeile eingegeben haben, los werden, dann kann die index.php mit einer Redirection versehen werden.
<?php
header("Location:http://www.biefer.com/nirvana/siewurdenumgeleitet.php");
?>
Umleitung von Domains
Wird eine Umleitung in der index Datei des Root Ordners vorgenommen, verschwindet die ganze Site aus dem Google-Ranking!
Z.B. in der index.php der Domain www.1000fragen.ch stünde:
<?php
header("Location:http://www.1000fragen.com/index.php");
// oder auch bei:
header("Location:http://www.1000fragen.ch/Unterordner/index.php");
?>
Dann wird www.1000fragen.ch aus allen Rankings gelöscht und verschwindet im Sandkasten.
Allgemeine Infos zum Header
Sobald eine Ausgabe durch den Browser stattfinden soll, wird zum Zweck der Kommunikation zwischen Server und Browser, einmalig und automatisch ein Header vom Server zum Browser gesendet. Wenn bereits ein Header gesendet wurde, kommt ein Redirect-Header zu spät und löst eine Fehlermeldung aus! (Andere Header siehe weiter unten.)
Debug
Zum Auffinden der Schwachstelle, die bereits einen Versand des Headers ausgelöst hat, kann folgende Funktion verwendet werden:
if (headers_sent ($file, $line)) {
print "Headers wurden gesendet in Datei: $file von Zeile: $line";
?>
Was in einem Header steht
Der Server teilt dem Browser durch den automatisch generierten Header bei dessen Ankunft den Status der Datei mit. Diese IDs können aber auch in der Datei vorgegeben werden, dem Browser wird bewusst eine (falsch-) Info zugespielt!
Dateityp (Inhalt der Datei) vorgeben
Folgende Seite wird nicht geparst sondern der ganze Code wird so dargestellt, weil die Seite vorgibt nur Text zu sein:
davor steht nichts
<?php
header("Content-Type: text/plain");
?>
Wenn mit den PHP image functions ein Bild dynamisch erzeugt wird, das auch als Bild im Browser angezeigt werden soll, muß der Typ explizit angegeben werden:
davor steht nichts
<?php
header("Content-Type: image/png");
?>
Wenn sich eine Datei als binär ausgibt, wird sie vom Browser zum Speichern vorgeschlagen, der Speichername ist der existierende Dateiname:
davor steht nichts
<?php
header("Content-Type: application/octetstream");
header("Content-Transfer-Encoding: binary"); // sicherheitshalber auch noch so
header("Content-Length: {Dateigroesse}"); // Dateigröße zum Berechnen der Downloadzeit
?>
Zwischenspeichern verhindern
davor steht nichts
<?php
header("Expires: -1");
header("Cache-Control: post-check=0, pre-check=0");
header("Pragma: no-cache");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
?>
Zusätzlich für IE ab Version 5 den folgenden HTML-Code am Anfang der Datei, d.h. zwischen <html> und <head>
[language=HTML]
<head>
<meta http-equiv="pragma" content="no-cache">
</head>
Achtung: Eine solche Datei wird von Suchrobotern ignoriert.