WinFuture-Forum.de: Individuelle Fehlermeldungen, Je Nach Referer - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Individuelle Fehlermeldungen, Je Nach Referer


#1 Mitglied ist offline   sкavєи 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.614
  • Beigetreten: 20. Juli 04
  • Reputation: 62
  • Geschlecht:Männlich
  • Wohnort:Stralsund

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
Eingefügtes Bild
Eingefügtes Bild
0

Anzeige



#2 Mitglied ist offline   crashXP 

  • Gruppe: aktive Mitglieder
  • Beiträge: 43
  • Beigetreten: 04. Februar 05
  • Reputation: 0

geschrieben 23. September 2008 - 10:58

Ich würde versuchen anhand der IP zu versuchen zwischen internen und äußerem Netz zu unterscheiden:

 $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

0

#3 Mitglied ist offline   sкavєи 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.614
  • Beigetreten: 20. Juli 04
  • Reputation: 62
  • Geschlecht:Männlich
  • Wohnort:Stralsund

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:
$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
Eingefügtes Bild
Eingefügtes Bild
0

#4 Mitglied ist offline   crashXP 

  • Gruppe: aktive Mitglieder
  • Beiträge: 43
  • Beigetreten: 04. Februar 05
  • Reputation: 0

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

0

#5 Mitglied ist offline   sкavєи 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.614
  • Beigetreten: 20. Juli 04
  • Reputation: 62
  • Geschlecht:Männlich
  • Wohnort:Stralsund

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"?
Eingefügtes Bild
Eingefügtes Bild
0

#6 Mitglied ist offline   crashXP 

  • Gruppe: aktive Mitglieder
  • Beiträge: 43
  • Beigetreten: 04. Februar 05
  • Reputation: 0

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
0

#7 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.701
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 23. September 2008 - 14:27

Nur, dass es keine *.999er IPs gibt. :P
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)
0

#8 Mitglied ist offline   sкavєи 

  • Gruppe: aktive Mitglieder
  • Beiträge: 6.614
  • Beigetreten: 20. Juli 04
  • Reputation: 62
  • Geschlecht:Männlich
  • Wohnort:Stralsund

geschrieben 23. September 2008 - 14:31

Joa OK, das stört nicht weiter. Danke für die Antworten.
Eingefügtes Bild
Eingefügtes Bild
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0