Seite 1 von 1
Individuelle Fehlermeldungen, Je Nach Referer
#1
geschrieben 23. September 2008 - 09:45
Hi,
ich habe hier eine Seite, die sowohl aus dem internen als auch aus dem externen Netz erreichbar ist.
Nun solle aber nicht alle Teile der Seite aus dem externen Netz erreichbar sein. Das heißt:
1. Sollen bestimmte Menüpunkte ausgeblendet werden, wenn das Quellnetz der Anfrage nicht eines der internen Netze ist.
2. Soll eine Fehlermeldung ausgegeben werden, wenn man die entsprechenden Seiten aus einem externen Netz aufruft.
3. Soll diese Fehlermeldung individuell für jede Seite sein.
Ich denke, das lässt sich mit PHP irgendwie regeln. Da ich aber selbst nicht sooo viel Ahnung von PHP habe. Hätte ich da gerne mal ein paar Tips zu.
Kann man mit PHP die Quelle der Anfrage als irgendwie verwerten? Wenn ja, wie?
Kann man auf Fehlerseiten (z.B. 404.php) die Referer-URL verwenden um die Quelle des Links auszulesen oder wird die Ref-URL durch die Umleitung auf die Fehlerseite unbrauchbar?
Falls ihr andere/bessere Lösungsansätze dafür habt, bin auch gerne dafür zu haben. Die oben genannten Ansätze sind nur eine Idee von mir gewesen, die ich grad' mal auf die schnelle hatte.
Ach ja falls es eine Rolle spielt: Auf dem Server läuft ein Apache.
Viele Grüße und vielen Dank im vorraus,
skaven
ich habe hier eine Seite, die sowohl aus dem internen als auch aus dem externen Netz erreichbar ist.
Nun solle aber nicht alle Teile der Seite aus dem externen Netz erreichbar sein. Das heißt:
1. Sollen bestimmte Menüpunkte ausgeblendet werden, wenn das Quellnetz der Anfrage nicht eines der internen Netze ist.
2. Soll eine Fehlermeldung ausgegeben werden, wenn man die entsprechenden Seiten aus einem externen Netz aufruft.
3. Soll diese Fehlermeldung individuell für jede Seite sein.
Ich denke, das lässt sich mit PHP irgendwie regeln. Da ich aber selbst nicht sooo viel Ahnung von PHP habe. Hätte ich da gerne mal ein paar Tips zu.
Kann man mit PHP die Quelle der Anfrage als irgendwie verwerten? Wenn ja, wie?
Kann man auf Fehlerseiten (z.B. 404.php) die Referer-URL verwenden um die Quelle des Links auszulesen oder wird die Ref-URL durch die Umleitung auf die Fehlerseite unbrauchbar?
Falls ihr andere/bessere Lösungsansätze dafür habt, bin auch gerne dafür zu haben. Die oben genannten Ansätze sind nur eine Idee von mir gewesen, die ich grad' mal auf die schnelle hatte.
Ach ja falls es eine Rolle spielt: Auf dem Server läuft ein Apache.
Viele Grüße und vielen Dank im vorraus,
skaven
Anzeige
#2
geschrieben 23. September 2008 - 10:58
Ich würde versuchen anhand der IP zu versuchen zwischen internen und äußerem Netz zu unterscheiden:
Mit $_SERVER['REMOTE_ADDR'] erhält man die IP den Benutzers und mit $_SERVER['HTTP_REFERER'] die URL, von der er auf die Seite zugegriffen hat.
$internip = "192.168.178";
$internUser = ($internip == substr($_SERVER['REMOTE_ADDR'], 0, strrpos($_SERVER['REMOTE_ADDR'], '.')));
if($internUser) {
echo "Zugriff erfolgreich von " . $_SERVER['HTTP_REFERER'];
} else {
echo "Zugriff verweigert von " . $_SERVER['HTTP_REFERER'];
}
Mit $_SERVER['REMOTE_ADDR'] erhält man die IP den Benutzers und mit $_SERVER['HTTP_REFERER'] die URL, von der er auf die Seite zugegriffen hat.
Dieser Beitrag wurde von crashXP bearbeitet: 23. September 2008 - 11:03
#3
geschrieben 23. September 2008 - 12:44
Super das funktioniert schonmal. Vielen Dank dafür.
Ich habe das ganze ein wenig für meine Bedürfnisse angepasst. Nun werden zunächst die ersten 2 Oktetts überprüft und wenn die stimmen soll das dritte Oktett geprüft werden. Allerdings habe ich hier 7 verschiedene Subnetze, welche alle Zugriff bekommen sollen.
Bisher sieht es so aus:
Ich könnte natürlich jetzt eine Abfrage machen die einfach immer wieder wiederholt wird (entweder 1 oder 2 oder 3 oder 4 oder 5 ...), aber das geht doch bestimmt auch einfacher oder? Gibt es da nicht irgendwas für eine "wenn a innerhalb von x bis y liegt, dann ..."-Abfrage?
Gruß,
skaven
Ich habe das ganze ein wenig für meine Bedürfnisse angepasst. Nun werden zunächst die ersten 2 Oktetts überprüft und wenn die stimmen soll das dritte Oktett geprüft werden. Allerdings habe ich hier 7 verschiedene Subnetze, welche alle Zugriff bekommen sollen.
Bisher sieht es so aus:
$ip = "192.168.";
if(substr($_SERVER['REMOTE_ADDR'], 0, 8) == $ip) {
if(substr($_SERVER['REMOTE_ADDR'], 9, 11) ?!?
Wie mache ich das nun am sinnvollsten? Was schreibe ich da bei den "?!?" am besten hin? Die Subnetze sind alle in Folge, also z.B. 192.168.1.* bis 192.168.7.*Ich könnte natürlich jetzt eine Abfrage machen die einfach immer wieder wiederholt wird (entweder 1 oder 2 oder 3 oder 4 oder 5 ...), aber das geht doch bestimmt auch einfacher oder? Gibt es da nicht irgendwas für eine "wenn a innerhalb von x bis y liegt, dann ..."-Abfrage?
Gruß,
skaven
#4
geschrieben 23. September 2008 - 13:07
Mit Reguläre Ausdrücke:
$internUser = preg_match("/192\.168\.[1-7]\.\d{1,3}/", $_SERVER['REMOTE_ADDR']);
if($internUser) {
echo "Zugriff erfolgreich von " . $_SERVER['HTTP_REFERER'];
} else {
echo "Zugriff verweigert von " . $_SERVER['HTTP_REFERER'];
}
Dieser Beitrag wurde von crashXP bearbeitet: 23. September 2008 - 13:08
#5
geschrieben 23. September 2008 - 13:57
Danke. Das funktioniert Super. Eine Frage noch wofür ist das "\d{1,3}/" in der RegExp? Ist das einfach nur ein "da folgen noch 3 andere Zeichen"?
#6
geschrieben 23. September 2008 - 14:03
\d steht für eine Zahl von 0..9 und {1,3} legt fest das der Ausdruck mind. einmal und max. 3mal vorhanden sein darf
#7
geschrieben 23. September 2008 - 14:27
Nur, dass es keine *.999er IPs gibt. 
In der Regel dürfte das aber nicht störend sein, und falls doch hilft dagegen dieser etwas längere Regex (zu IP Addresses runterscrollen)
In der Regel dürfte das aber nicht störend sein, und falls doch hilft dagegen dieser etwas längere Regex (zu IP Addresses runterscrollen)
Thema verteilen:
Seite 1 von 1

Hilfe
Neues Thema
Antworten



Nach oben


