Antworten auf deine Fragen:
Neues Thema erstellen

HTTP Referer

Zaolat

Aktives Mitglied

Moin Moin,

auf der Arbeit soll ich eine PHP Funktion korrigieren, welche ein Werksstudent vor einiger Zeit programmiert hatte. Leider ist der Werksstudent nicht mehr erreichbar.

Es geht darum, dass auf einer Website Reports erstellt werden. Diese ist mit einem Link zu erreichen. Zuvor wird geprüft, ob derjenige Besucher dazu berechtigt ist. Dies erfolgt über eine eigene PHP Datei.

Leider kann ich nicht genau erkennen, wie der Programmierer die Erlaubnis prüft. Kann mir einer von euch erläutern, was es mit dem Referer auf sich hat?

Hier der Code:
Code:
<?php
error_reporting(0);                 //Error Reporting deaktiviert da ich dies hier selbst übernehme
if($_SERVER['HTTP_REFERER'] == NULL){
    echo "<div class='w3-container w3-center' style='padding-top:2%;' ><div class='w3-panel w3-red'><h3>Unberechtigter Zugriff!</h3>
            <p>Es tut uns leid, aber sie sind nicht berechtigt diesen Report einzusehen.</p>
        </div></div>";
    die();
}
 

Zaolat

Aktives Mitglied

Das Skript prüft, ob es einen Referer gibt. Gibt es keinen, wurde die Seite direkt aufgerufen, was demnach nicht erlaubt ist.
Und das wird dann verweigert.

Also muss der Link über eine andere Seite aufgerufen werden?
Da der Link auf einer anderen Seite eingefügt ist und nur von bestimmten Anwender gesehen werden kann (Stammdatenmanagement), hat der Student wohl darüber die "Berechtigung" programmiert, dass nicht jeder das sehen kann. Verstehe ich das so richtig?
 

Dudlhofer

Aktives Mitglied

Also muss der Link über eine andere Seite aufgerufen werden?
Da der Link auf einer anderen Seite eingefügt ist und nur von bestimmten Anwender gesehen werden kann (Stammdatenmanagement), hat der Student wohl darüber die "Berechtigung" programmiert, dass nicht jeder das sehen kann. Verstehe ich das so richtig?

Dazu müsste der Referer aber auch noch abgeprüft werden, denn sonst könnte jeder, der über irgendeinen Link darauf kommt die Daten einsehen. Bestimmt wird der Referer mit einem oder mehreren gültigen URLs abgeglichen und im Fehlerfall geleert, damit die o.a. Abfrage greift.
 

Zaolat

Aktives Mitglied

Dazu müsste der Referer aber auch noch abgeprüft werden, denn sonst könnte jeder, der über irgendeinen Link darauf kommt die Daten einsehen. Bestimmt wird der Referer mit einem oder mehreren gültigen URLs abgeglichen und im Fehlerfall geleert, damit die o.a. Abfrage greift.

Die einzige Überprüfung die erfolgt ist, ob der Referer von außerhalb der Domäne kommt.

Code:
if($origin != "DOMAIN" && $origin != "ANDERE DOMAIN"){
    echo "<div class='w3-container w3-center' style='padding-top:2%;' ><div class='w3-panel w3-red'>Es tut uns leid, aber sie sind nicht berechtigt diesen Report einzusehen.</div></div>";
    die();

Ich habe solch eine Art von Berechtigungsabfrage noch nie gesehen. Ist dies eher üblich?

Die aktuelle Herausforderung ist, dass, obwohl die gewünschte Seite über ein Link aufgerufen wird, dennoch die Meldung kommt, dass der Zugriff Unberechtigt ist. Obwohl von der gewünschten Domain (Zumal diese Info nicht kommt).

Nur das muss ich dann noch mal genauer schauen, was genau geschieht.

Vielen Dank für die bisherige Hilfe.
 

lachender_engel

Aktives Mitglied

Also muss der Link über eine andere Seite aufgerufen werden?
Rein Sachlich gesehen: ja!
Da der Link auf einer anderen Seite eingefügt ist und nur von bestimmten Anwender gesehen werden kann (Stammdatenmanagement), hat der Student wohl darüber die "Berechtigung" programmiert, dass nicht jeder das sehen kann. Verstehe ich das so richtig?
Kann sein, wäre aber übel. IM grunde ist die Frage, was steht unter dem Code, den Du gepostet hast (meine Glaskugel ist gerade in der Werkstatt). Hier sollte dann geprüft werden, ob ein erlaubter Referer die Seite aufruft. Aber ob das passiert, kann ich nicht sagen...
 
G

Gelöschtes Mitglied 633957

Guest

Also muss der Link über eine andere Seite aufgerufen werden?
Da der Link auf einer anderen Seite eingefügt ist und nur von bestimmten Anwender gesehen werden kann (Stammdatenmanagement), hat der Student wohl darüber die "Berechtigung" programmiert, dass nicht jeder das sehen kann. Verstehe ich das so richtig?
Anhand des gezeigten Code-Snippet, im Grunde genommen, ja!
Einfach ausgedrückt: Wenn auf Seite A der Link zur Seite B angeklickt wird, ruft der Browser die Seite B auf und sendet als Referrer die URL der Seite A, sagt also dem Server wo der Link zur Seite B zu finden war.

Zuvor wird geprüft, ob derjenige Besucher dazu berechtigt ist.
Das wird im Snippet allerdings NICHT geprüft! Hier wird nur geprüft ob der übermittelte Referrer-Wert nicht leer ist. Nicht jeder clientseitige Browser sendet den Referrer, da man dieses in beinahe jedem Browser unterbinden kann!

Edit:
Wow, so langsam fange ich an das Forum zu hassen! Über 20 Minuten hat es nach dem Absenden gedauert bis mein Post in der Datenbank war! Egal...
Ich habe solch eine Art von Berechtigungsabfrage noch nie gesehen. Ist dies eher üblich?
Bezieht sich das auf das 2te Snippet? Das ergibt für mich keinen Sinn, denn dort steht:
Wenn die Variable $origin weder dieser noch einer anderen Domain entspricht, muss es sich wohl um einen Sack Kartoffeln handeln!
 
Zuletzt bearbeitet von einem Moderator:

Zaolat

Aktives Mitglied

Es gibt mehrere PHP Dateien, welche aufgerufen werden können. In jeder steht zu beginn:
Code:
            <?php
            //Überprüfen ob der Nutzer aus XXX kommt
            require_once 'isAllowedToSee.php';
            ?>
Und der Code der isAllowedToSee.php Datei lautet komplett so:
Code:
<?php
/**
* Diese Datei überprüft ob ein Nutzer vom Server
* kommt, nur dann hat dieser die Rechte den Rest der Seite zu sehen.
*/
error_reporting(0);                 //Error Reporting deaktiviert da ich dies hier selbst übernehme
if($_SERVER['HTTP_REFERER'] == NULL){
    echo "<div class='w3-container w3-center' style='padding-top:2%;' ><div class='w3-panel w3-red'><h3>Unberechtigter Zugriff!</h3>
            <p>Es tut uns leid, aber sie sind nicht berechtigt diesen Report einzusehen.</p>
        </div></div>";
    die();
}
$origin = substr($_SERVER['HTTP_REFERER'],7,24);
if($origin != "DOMAIN" && $origin != "ANDERE DOMAIN"){
    echo "<div class='w3-container w3-center' style='padding-top:2%;' ><div class='w3-panel w3-red'>Es tut uns leid, aber sie sind nicht berechtigt diesen Report einzusehen.</div></div>";
    die();

Ich persönlich halte diese Prüfung der Berechtigung als fragwürdig. Nur so wurde es bisher verwendet und ich wollte es zunächst verstehen. Daher meine Frage hier im Forum.
 
G

Gelöschtes Mitglied 633957

Guest

Ich persönlich halte diese Prüfung der Berechtigung als fragwürdig.
Da bin ich ganz bei Dir!
Ich bzw. mein Browser würde bei der Prüfung durchfallen, da er den Referrer nicht sendet. Und selbst wenn er ihn übermitteln würde, verstehe ich die if-Anweisung nicht! Möglicherweise stehe ich auf dem Schlauch, doch warum sollten die 24 Zeichen ab dem 7ten Zeichen im Referrer mit "DOMAIN" oder "ANDERE DOMAIN" übereinstimmen? Da es wahrscheinlich niemals der Fall sein wird, ist die Abfrage in meinen Augen völlig überflüssig! Irgendetwas muss ich hier übersehen!?!
Wie soll denn der 24 Zeichen lange String aus dem Referrer sowohl "DOMAIN" als auch "ANDERE DOMAIN" sein?
 

Curanai

Aktives Mitglied

@tynick Womöglich ist es vom TO einfach nur überschrieben, um das betroffne Web-Grundstück nicht zu zeigen. Ich hoffe, dass es keine PHP-Konstanten sein sollen. :D Mein Lieblingsgedanke dazu: Der Werkstudent ist nie damit fertig geworden. ;)

Es wäre vielleicht eleganter eine Session anzulegen, falls der User auf dem System schon ist – die hätte ein externer nicht. Damit könntest Du auch Besucher einfagen, die keinen Referer übergeben etc. Hier müsstest Du nur auf isset($_SESSION['beliebigerName']) prüfen.

Ansonsten würde ich das "require_once" noch zu "include" machen - der erstere ist zeitintensiver und macht so (für mich) in der gezeigten Nutzung keinen Sinn.
 

Zaolat

Aktives Mitglied

@tynick Womöglich ist es vom TO einfach nur überschrieben, um das betroffne Web-Grundstück nicht zu zeigen. Ich hoffe, dass es keine PHP-Konstanten sein sollen. :D Mein Lieblingsgedanke dazu: Der Werkstudent ist nie damit fertig geworden. ;)

Es wäre vielleicht eleganter eine Session anzulegen, falls der User auf dem System schon ist – die hätte ein externer nicht. Damit könntest Du auch Besucher einfagen, die keinen Referer übergeben etc. Hier müsstest Du nur auf isset($_SESSION['beliebigerName']) prüfen.

Ansonsten würde ich das "require_once" noch zu "include" machen - der erstere ist zeitintensiver und macht so (für mich) in der gezeigten Nutzung keinen Sinn.

Genau; DOMAIN und ANDERE DOMAIN ist nur ein Platzhalterund keine Konstante ;-)

Ich werde auch eine andere Prüfung programmieren. Muss mich da jedoch intensiver reinfuchsen, da ich noch nicht so firm mit PHP und Datenbanken bin.
Es gibt eine Benutzergruppe, die nur Zugriff auf die dahinter liegenden Reports haben sollen. Ich spiele mit dem Gedanken, den Besucher des Links prüfen zu lassen, welcher User das ist und ob dieser die Berechtigungsgruppe true hat oder nicht. Ich denke, dass das die eleganteste Lösung ist.
Dafür muss ich jedoch meine PHP Kenntnisse steigern.
 

Curanai

Aktives Mitglied

Wenn es eine Benutzergruppe bereits ist, gibt es auch bereits die benötigte Sitzungsvariable. Demnach musst Du nur mal schauen, was unter var_dump($_SESSION) für diese Verwertung zur Verfügung steht; jetzt klingt es plötzlich so, dass alles da wäre.

Ist das ein Drittanbieter (Wordpress, Woltlab, phpBB, ...) oder was eigenes? Letzteres fänd ich interessanter ... wenn Du aktive Hilfe bei PHP brauchst, können wir darüber reden (denn das geht schneller als diese Tipperei). Schick mir 'ne PN, dann bekommst Zugangsdaten zum eigenen TS-Server oder den Kontakt via Skype (das bietet sich an, wenn Du am Source direkt Hilfe braucht).

Nicht vergessen: Spaß muss es machen!

Viel Erfolg.
 

Zaolat

Aktives Mitglied

Ich habe da noch eine Frage. Gibt es eine Möglichkeit, dass kein Referer mitgeliefert wird; unabhängig des Browsers?
 

Curanai

Aktives Mitglied

Auszug aus der Wiki: "Referrer [...] bezeichnet im World Wide Web die Webseite, über die der Benutzer zur aktuellen Webseite bzw. Datei gekommen ist. Bei einer HTTP-Anfrage (z. B. eine Webseite oder ein Bild) sendet der Webbrowser den URL der ursprünglichen Webseite an den Webserver."

Wenn ich mir Deine Ziel-URL in die Favoriten lege, eintippe oder gar als Startseite hinterlege ... würde dann ein Referrer enthalten sein?

@Zaolat: Deine Nachricht hab ich bekommen und gelesen. Antwort bekommste auch gleich.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.611
Beiträge
1.538.341
Mitglieder
67.524
Neuestes Mitglied
BSKGA
Oben