Hallo,
Wie funzt das mit dem header()??
RTFM:
http://www.php.net/manual/de/function.header.php
Ich habe das so ähnlich schon mal versucht, hat aber nicht geklappt.
Vermutlich hattest Du _vor_ dem Header schon etwas an den
Browser geschickt, und sei es nur ein Leerzeichen oder Zeilenumbruch.
http://www.dclp-faq.de/q/q-fehler-header.html
Wie wäre es, den User via header("LOCATION: username:passwort@test.php") auf die Seite Test zu schicken, die Seite test.php leitet sofort weiter an header("LOCATION: seite.php"). Dann dürfte der User eigenlich den Username und das Passwort gar nicht zu sehen bekommen...
Das ist Unfug.
Und es enthaelt einen groben Fehler: Die URL muss absolut und vollstaendig sein,
also mit "http://" beginnen:
header('Location: http://www.example.com/seite.php');
Anders als bei FTP ist es bei HTTP soviel ich weiss nicht vorgesehen,
den Benutzernamen und das Kennwort in die URL reinzupacken.
(Ich weiss, dass es in den meisten Browsern trotzdem funktioniert.)
Es ist auch sehr fahrlaessig, denn die Adresse bleibt an diversen
Orten haengen, z.B. im Cache, in der History, im Adresszeilen-Gedaechtnis
des Browsers, in Proxy-Servern u.s.w.
Wenn die Sicherheit sehr wichtig ist, sollte man sowieso nicht HTTP,
sondern HTTPS (SSL) verwenden.
Auch bei GET- und POST-Anfragen wird das Passwort unverschluesselt
uebermittelt.
Bei GET ist es genauso unsicher, wie mit der obigen "@" Methode, weil
das Passwort sichtbar ist.
Befasse Dich intensiver mit Sicherheit im allgemeinen und Passwortschutz-
Loesungen in PHP sowie Sessions im speziellen.
_Einigermassen_ sicher waere es z.B., wenn sich der Benutzer
ueber ein POST-Formular einlogt, dann eine Session-ID kriegt,
und fuer alle folgenden Anfragen die Session-ID uebergeben wird.
Die Session-ID wird ueblicherweise in einem Cookie gespeichert,
wenn das nicht moeglich ist, wird sie an alle URLs drangehaengt.
Sobald der Benutzer sich "abmeldet", oder nach einer vorbestimmten
Zeit der Inaktivitaet, wird die Session geloescht, und auch jemand,
der zufaellig an die Session-ID kommt, kann nichts mehr damit anfangen,
weil sie nicht mehr gueltig ist.
Problem: Es funzt nicht, da der Client in diesem Fall der Server war...
Das sollte keine Rolle spielen.
Kann mir jemand die Möglichkeit mit dem Bilder via header senden näher erläutern? Evtl. auch nen Beispiel-Code??
<?php
$verlangt=intval($_GET['nr']);
unset($bild); // Zur Sicherheit, falls register_globals on ist...
unset($pfadzumbild); // dito
$bild[0]="pfad/zum/null.gif"; // Transparentes 1x1 Pixel GIF
$bild[1]="pfad/zu/bild1.jpg";
$bild[2]="pfad/zu/bild2.gif";
if (isset($bild[$verlangt])) // d.h. wenn ein zulaessiges Bild verlangt wird
{ $pfadzumbild=$bild[$verlangt]; }
else
{ $pfadzumbild=$bild[0]; } // Transparentes GIF ausgeben
$bildinfos=getimagesize($pfadzumbild);
$bildtypnr=$bildinfos[2];
$contenttype[1]='image/gif';
$contenttype[2]='image/jpeg';
$contenttype[3]='image/png';
header("Content-Type: $contenttype[$bildtypnr]");
readfile($pfadzumbild);
?>
Kannst Du hier ausprobieren:
http://www.tiptom.ch/tests/phpssi/bildschleuse.php?nr=1
http://www.tiptom.ch/tests/phpssi/bildschleuse.php?nr=2
http://www.tiptom.ch/tests/phpssi/bildschleuse.php?nr=99
PHP-Manual-Kapitel zu den verwendeten Funktionen getimagesize() und readfile():
http://www.php.net/manual/en/function.getimagesize.php englisch, aktuell
http://www.php.net/manual/de/function.getimagesize.php deutsch, unvollstaendig
http://ch.php.net/manual/en/function.readfile.php englisch, aktuell
http://ch.php.net/manual/de/function.readfile.php deutsch
Testen, welchen HTTP-Header der Server schickt, kannst Du z.B. mit:
http://cgi.w3.org/cgi-bin/headers
Gruesse,
Thomas