Uwe: wie wurde Script aufgerufen

Hallo,

habe ein kleines Problem... vielleicht kann mir jemand einen Denkanstoss geben.

Gibt es eine Möglichkeit zu prüfen, ob ein php-Skript direkt, d.h. durch Eingabe in die Browseradresszeile, oder korrekt über einen Link in einer HTML Seite aufgerufen wurde. Die Referer Variable würde ich ganz gerne ausser acht lassen.

Danke im voraus!
Uwe

  1. Hallo,

    habe ein kleines Problem... vielleicht kann mir jemand einen Denkanstoss geben.

    Gibt es eine Möglichkeit zu prüfen, ob ein php-Skript direkt, d.h. durch Eingabe in die Browseradresszeile, oder korrekt über einen Link in einer HTML Seite aufgerufen wurde. Die Referer Variable würde ich ganz gerne ausser acht lassen.

    Danke im voraus!
    Uwe

    Ganz einfach:
    man nennt das php script index.php!

  2. Hallo,

    habe ein kleines Problem... vielleicht kann mir jemand einen Denkanstoss geben.

    Gibt es eine Möglichkeit zu prüfen, ob ein php-Skript direkt, d.h. durch Eingabe in die Browseradresszeile, oder korrekt über einen Link in einer HTML Seite aufgerufen wurde. Die Referer Variable würde ich ganz gerne ausser acht lassen.

    Danke im voraus!
    Uwe

    wie das in php aussieht kann ich dir nicht sagen (da kenne ich mich nicht so aus) aber: der server übergibt mehrere variablen, die (in perl zumindest) in dem hash %ENV gespeichert sind, dort findest du, die variable $ENV{HTTP_REFERER}. diese enthält einen string, der angibt, von welcher seite dein script aufgerufen wurde. ist der string leer, dann kannst du davon auskehen, das dein script so aufgerufen wurde, wie du es nicht möchtest (einfach die url in der locationzeile des browsers angegeben).

  3. Gibt es eine Möglichkeit zu prüfen, ob ein php-Skript direkt, d.h. durch Eingabe in die Browseradresszeile, oder korrekt über einen Link in einer HTML Seite aufgerufen wurde. Die Referer Variable würde ich ganz gerne ausser acht lassen.

    Ohne Referer geht es nicht, und der ist unzuverlässig.

    - Sven Rautenberg

  4. Moin

    Gibt es eine Möglichkeit zu prüfen, ob ein php-Skript direkt, d.h. durch Eingabe in die Browseradresszeile, oder korrekt über einen Link in einer HTML Seite aufgerufen wurde. Die Referer Variable würde ich ganz gerne ausser acht lassen.

    Eine richtige Lösung gibt es leider nicht, aber vielleicht kannst du so etwas ähnliches erreichen. Ich poste mal alle Ansätze die mir einfallen. Jeder hat Vor- und Nachteile:

    1. Die einfachste Möglichkeit wäre, ein Formular mit POST-Methode zu verwenden. Dann kannst du schon an der Methode ($REQUEST_METHOD) ablesen, ob die Seite durch einen Link oder Addresseingabe oder von einem Formular aufgerufen wurde. Evt. kannst du das durch ein hidden-Formularfeld mit noch weiter beschränken.

    2. Du benutzt PHP-Sessions und kannst als eine der Session-Variablen die zuletzt aufgerufene Seite speichern.

    3. Wenn es dir nur darauf ankommt, dass der Besucher in den letzten 5 Minuten (mit beliebigen Werten für 5) auf der anderen Seite war, kannst du den timestamp als Parameter übergeben. Damit nun nicht jeder einfach einen anderen Timestamp eintragen kann, solltest du ihn noch mit einer Mini-Version einer digitalen Signatur sichern:

    <?php
     $time = time();
     $sig = md5("Geheim".$time);
     echo "<a href="link.php?time=$time&sig=$sig">link</a>";
    ?>

    und auf der anderen Seite dann

    <?php
     if( (time()-$time) > 300 || $sig!=md5("Geheim".$time)) {
      //böse
     } else {
      //gut
     }
    ?>

    Damit kannst du zumindest sicherstellen, dass der Besucher vor nicht mehr als 300 Sekunden die andere Seite neu geladen hat.

    4. Wenn du mit Kanonen auf Spatzen schiessen willst, benutze eine Datenbank. Jedesmal wenn die Seite mit dem Link neu geladen wird, generierst du eine eindeutige Kennung - Apache stellt dir freundlicherweise schon in $UNIQUE_ID einen String bereit der mit ziemlicher Sicherheit einmalig ist - und dann speicherst du diese in einer Datenbank (möglichst zusammen mit dem Zeitpunkt) und hängst sie an den Link an. Die gelinkte Seite schaut sich nun die übergebene Kennung an und prüft ob sie in der Datenbank existiert. Wenn ja, dann ist alles in Ordnung und diese Kennung wird aus der Datenbank gelöscht, wenn nein, dann ist etwas faul. Außerdem sollte es die Datenbank noch von Kennungen befreien, die schon zu alt sind.

    Hoffe geholfen zu haben..

    --
    Henryk Plötz
    Grüße von der Ostsee