Beschränken Sie den Zugriff auf die Seite so, dass er nur von einer bestimmten Seite aus zulässig ist

StackOverflow https://stackoverflow.com/questions/2016173

Frage

Diese Frage ähnelt der, die ich gestellt habe Hier.Aber es hängt damit zusammen, weil ich den gleichen Effekt erzielen möchte.Ich möchte, dass die Benutzer nur über die Hauptseite auf andere Seiten der Website zugreifen können.Die erste Seite enthält einen Frame für die Navigation und dann einen Frame für den Inhalt der Seite, zu der sie navigieren.Ich möchte, dass es so eingerichtet ist, dass sie nur über diese Hauptseite auf die Inhaltsseiten zugreifen können.Also, wenn die Hauptseite ist http://intranet/index.html dann können sie nicht dorthin gelangen http://intranet/other_page.html ohne den in index.html bereitgestellten Link zu verwenden.Ist das möglich und wenn ja, welche Technik wäre die beste?Ich verwende Apache, um die Website bereitzustellen, und mir stehen PHP und Javascript zur Verfügung.

War es hilfreich?

Lösung

Überprüfen Sie den Request-Header Referer - es gelegentliche Nutzer mit ihren Browsern vereiteln wird. Es kann jedoch gefälscht werden -. Sie wird nicht bestimmt Angreifer täuschen

Falsch positive Ergebnisse sind allerdings möglich. Manchmal ist Referer nicht gesetzt.

Andere Tipps

Die kurze Antwort lautet: Nein, das ist nicht möglich. streng Apropos.

Die lange Antwort lautet: Ja, Sie können wahrscheinlich eine vernünftige Lösung finden Annäherung davon, aber Sie müssen sich der Einschränkungen bewusst sein.

Grundsätzlich ist HTTP zustandslos.Unabhängig davon, welche spezifischen Aktionen ausgeführt werden, sieht Ihr Webserver eine einzige Anfrage /other_page.html und Sie müssen entscheiden, ob Sie es servieren oder nicht.Um eine vernünftige Einschränkung zu erreichen, ist dies der erste Schritt Du wirst haben um eine Möglichkeit zu haben, den serverseitigen Status aufrechtzuerhalten.Ohne dies können Sie keine eingehende Anfrage für other_page.html mit früheren Anfragen abgleichen.Die gute Nachricht ist, dass PHP native Unterstützung für serverseitige Sitzungen bietet.

(Ohne serverseitige Sitzungen könnten Sie versuchen, dies mit clientseitigen Sitzungscookies oder der Überprüfung des Referrer-Headers zu erreichen, aber dann ist es für die Clients trivial, etwas zu fälschen, da es sich lediglich um Zeichenfolgen handelt, die sie Ihnen senden, und Sie akzeptieren ihr Wort dafür ).

Jetzt müssten Sie diese Sitzung verwenden, um zu verfolgen, ob ein Benutzer auf der ersten Seite war, bevor er zur anderen Seite wechselte. Sie könnten in der Sitzung eine Variable festlegen, wenn die erste Seite angefordert wird, und bei jeder Anforderung für /other_page .html, stellen Sie sicher, dass diese Variable in der Sitzung festgelegt ist, bevor Sie sie bereitstellen.Das gibt Ihnen zumindest eine vernünftige Vorstellung davon, dass sie die erste Seite in der aktuellen Sitzung besucht haben.

Sie haben jedoch absolut keine Möglichkeit zu wissen, auf welchen Link im Browser geklickt wurde, um eine bestimmte URL anzufordern – oder ob überhaupt ein Browser beteiligt war.Ihr Server sieht lediglich eine Anfrage nach einer bestimmten Ressource zusammen mit einigen Headern.Eine Möglichkeit, dies möglicherweise zu simulieren, besteht darin, eine zufällige Zeichenfolge zu generieren /index.html bereitgestellt wird, und fügen Sie dies als Abfrageparameter zum Link auf dieser Seite hinzu.Speichern Sie es dann in der Sitzung und überprüfen Sie, wenn other_page gefragt wird, ob die Anfrage einen Abfrageparameter mit derselben Zufallszeichenfolge enthält.


Aber an diesem Punkt ist es an der Zeit, einen Schritt zurückzutreten und zu sagen: Warum Willst du das machen?Ich kann mir überhaupt keinen guten Grund vorstellen, warum dies getan werden sollte. Es handelt sich nicht um eine angemessene Sicherheitsmaßnahme - Sie müssten die Sicherheit richtig betreiben, und wenn das Ihre Motivation ist, hätten Sie danach fragen sollen.Es ist auch keine gute Methode, den Besuchern einen bestimmten Arbeitsablauf aufzuzwingen – ob das überhaupt eine gute Idee ist, darüber lässt sich streiten, aber anstatt darüber nachzudenken, wie man die Leute dazu zwingen kann, vor Seite B auf Seite A zu gehen, sollten Sie darüber nachdenken genau Warum brauchen Sie sie dazu, was sind Ihre limitierenden Faktoren und wie können Sie diese am wenigsten aufdringlich erreichen?

Vergiss nicht - http://intranet/other_page.html ist ein Uniform Resource Locator, der dem Inhalt entspricht, den Sie auf dieser Seite bereitstellen.Wenn jemand diese Adresse eines Tages besucht und eine nützliche Ressource sieht, warum um alles in der Welt sollte es ihm dann nicht erlaubt sein, sie bei der Rückkehr wieder zu sehen?Ich empfehle Ihnen dringend, darüber nachzudenken, warum Sie mit Ihrer Website die Erfahrungen Ihrer Benutzer bewusst beeinträchtigen und gegen die allgemeine Funktionsweise des Internets verstoßen möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top