Navigation für IP-Bereiche

ctschorsch
Beiträge: 101
Registriert: So 21. Nov 2004, 23:48
Kontaktdaten:

Re: Navigation für IP-Bereiche

Beitrag von ctschorsch » Di 7. Feb 2012, 11:39

Andere Idee :)

Kann ich in einem Modul abfragen, zu welchen Frontend-Gruppen ein event. eingeloggter FrontendUser gehört ? Dann kann ich ja prüfen ob der User entweder zur entsprechenden Gruppe gehört, oder aber in einem gültigen IP Bereich ist. Dann ist die Kategorie halt nicht geschützt und taucht immer in der Navigation auf. Ist ein User dann nicht berechtigt, bekommt er eine Meldung angezeigt.

Georg

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Navigation für IP-Bereiche

Beitrag von Spider IT » Di 7. Feb 2012, 11:50

Das kann nicht funktionieren, denn sobald die Kategorie in der Navigation auftaucht kann sie auch aufgerufen werden.
Der Link geht ja direkt auf die Kategorie, da müsstest du im aufgerufenen Artikel prüfen und dann eine Umleitung anstoßen.
M.E. ist es dann eigentlich schon zu spät, denn wenn eine Umleitung per header() nicht greift (aus welchem Grund auch immer) und JavaScript im Browser ausgeschaltet ist, kommt der Artikel trotzdem.

Gruß
René

ctschorsch
Beiträge: 101
Registriert: So 21. Nov 2004, 23:48
Kontaktdaten:

Re: Navigation für IP-Bereiche

Beitrag von ctschorsch » Di 7. Feb 2012, 12:36

Mmh, ich kann doch im Startartikel prüfen ob wer rein darf oder nicht und ggf. den Startartikel mit ner Fehlermeldung als Ausgabe beenden ?

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Navigation für IP-Bereiche

Beitrag von Spider IT » Di 7. Feb 2012, 13:27

Das Problem dabei wird sein, dass du mehrere Module im Artikel haben wirst (Headline, Text, sonstiges).
Du müsstest dann für alle diese Module die Programmierung dahingehend abändern, dass eine Ausgabe nur für "Befugte" erfolgt.
Die Ausgabe der gesamten Seite im Modul mit die() abzubrechen ist schlecht, denn dann wird der HTML-Code nie beendet.

Gruß
René

ctschorsch
Beiträge: 101
Registriert: So 21. Nov 2004, 23:48
Kontaktdaten:

Re: Navigation für IP-Bereiche

Beitrag von ctschorsch » Di 7. Feb 2012, 13:52

Nuja, im konkreten Fall reicht es, wenn der Container in dem das Modul ist nicht angezeigt wird, bzw. das Modul eine Ausgabe macht "Du kommst hier nicht rein", wenn der IP Bereich nicht stimmt. Der Rest der Seite kann dann ruhig ganz normal angezeigt werden.

G

Oldperl
Beiträge: 4261
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Navigation für IP-Bereiche

Beitrag von Oldperl » Di 7. Feb 2012, 14:05

ctschorsch hat geschrieben:...bzw. das Modul eine Ausgabe macht "Du kommst hier nicht rein", wenn der IP Bereich nicht stimmt.
Das kannst du machen mit einer klassischen IP-Sperre, diese auf Bereiche erweitert, und das geht selbstverständlich.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Navigation für IP-Bereiche

Beitrag von Spider IT » Di 7. Feb 2012, 14:51

Wenn es sich um nur ein Modul handelt, kannst du das machen.

Die IP-Adresse kriegst du mit $_SERVER['REMOTE_ADDR'], für die Berechtigung des Frontend-Users musst du dich wohl mit den Klassen für Frontend-User, -Gruppen und -Berechtigungen auseinander setzen (/contenido/classes/class.frontend.*.php).

Wenn allerdings alle FE-User die Berechtigung haben sollen, kannst du $auth->auth['uid'] prüfen:
  • ($auth->auth['uid'] != 'nobody') => alle angemeldete User
  • (is_numeric($auth->auth['uid'])) => alle Frontend-User
  • ((!is_numeric($auth->auth['uid'])) && ($auth->auth['uid'] != 'nobody')) => alle Backend-User
Gruß
René

ctschorsch
Beiträge: 101
Registriert: So 21. Nov 2004, 23:48
Kontaktdaten:

Re: Navigation für IP-Bereiche

Beitrag von ctschorsch » Di 7. Feb 2012, 15:21

Hey,

ja, ähnlich hab ich es jetzt gemacht. Im Outpt meines Moduls

Code: Alles auswählen


/* Check for FrontEnd group or allowed IP */
$oFeUserCollection = new FrontendUserCollection();
$oFeUser = $oFeUserCollection->loadItem($auth->auth["uid"]);
$aFeUserGroups = $oFeUser->getGroupsForUser();
$ePaperGroup = getEffectiveSetting('epaper', 'epaper-group', 1);
$ePaperIPs = preg_split('/,/', getEffectiveSetting('epaper','allowed-hosts', 1) );

$hostallowed=0;
foreach($ePaperIPs as $ip) {
  if ( strpos(substr($_SERVER['REMOTE_ADDR'], 0, 14), $ip) !== false ) {
   $hostallowed=1; break;
  }
}

$userallowed=0;
if (in_array($ePaperGroup,$aFeUserGroups) ) 
  $userallowed=1;

if ( $hostallowed || $userallowed ) {
 /* Mach den normalen Kram /*
} else {
 /* Zeige Fehlermeldung, ggf. Login Form */
}
Kann man jetzt schön über zwei Mandanten Variabeln regeln.

Gruss
Georg

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Navigation für IP-Bereiche

Beitrag von Spider IT » Di 7. Feb 2012, 15:43

Sieht schon ganz gut aus!
Ich hätte da noch einen Verbesserungsvorschlag, um die IP-Adress-Vergleiche variabler zu halten:

Code: Alles auswählen

$hostallowed = 0;
$rIP = explode('.', $_SERVER['REMOTE_ADDR']);
foreach ($ePaperIPs as $ip) {
    $IP = explode('.', $ip);
    if (($rIP[0] == $IP[0]) && ($rIP[1] == $IP[1]) && ($rIP[2] == $IP[2])) {
        $hostallowed = 1;
        break;
    }
}
Auf diese Weise vergleichst du die Zahlen der IP-Adressen, das geht auch dann noch, wenn kürzere Zahlen dabei sind.
Außerdem extrahierst du in jedem Durchgang erneut die ersten 14 Stellen der IP-Adresse, das kostet Zeit.
Wenn du das vor der Schleife einmal machst, und dann in der Schleife die Variable einsetzt, geht es etwas schneller.

Gruß
René

ctschorsch
Beiträge: 101
Registriert: So 21. Nov 2004, 23:48
Kontaktdaten:

Re: Navigation für IP-Bereiche

Beitrag von ctschorsch » Di 7. Feb 2012, 16:06

Hey,

jau, das Prüft aber natürlich auf komplette IPs. Ich würde mir gerne die Chance halten auf ganze Netze zu Prüfen also z.B "192.168.100."
Das geht halt mit dem strpos ganz gut...
Die Abfrage der remote IP hab ich nach oben gezogen, das ist in der Tat günstiger :)

Georg

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Navigation für IP-Bereiche

Beitrag von Spider IT » Di 7. Feb 2012, 17:54

Ich glaube du hast das nicht richtig gelesen.
Das was ich dir geliefert habe prüft die ersten 3 Zahlen der IP-Adresse ([0], [1] und [2]).
Das lässt sich sogar ganz leicht auf 2 oder 4 Teile umarbeiten.
Deine Lösung mit mit substr() liefert die ersten 14 Stellen, was bei 81.128.39.216 die gesamte IP liefert (13 Stellen im Beispiel).
Ein "Vergleich" mit strpos() gegen false prüft sogar, ob der ausgeschnittene Teil irgendwo im Vergleich vorkommt (muss nicht am Anfang sein).

Gruß
René

PS: "192.168.100." sind 12 Stellen, nicht 14 ;)

ctschorsch
Beiträge: 101
Registriert: So 21. Nov 2004, 23:48
Kontaktdaten:

Re: Navigation für IP-Bereiche

Beitrag von ctschorsch » Di 7. Feb 2012, 18:00

*patsch*

Hast natürlich recht. Hab nicht genau hingeschaut. Ich werde das mal umbauen.

Georg

ctschorsch
Beiträge: 101
Registriert: So 21. Nov 2004, 23:48
Kontaktdaten:

Re: Navigation für IP-Bereiche

Beitrag von ctschorsch » Di 7. Feb 2012, 20:39

Ach, irgendwie war das alles nicht das was ich wollte :)))
Ich check die IP jetzt gegen ne CDIR Angabe des Subnetzes. Damit komm ich glaub ich am besten klar gerade :)

Code: Alles auswählen

$hostallowed=0;
$remote=ip2long($_SERVER['REMOTE_ADDR']);
foreach($ePaperIPs as $cdir) {
  list($net, $mask) = preg_split ("/\//", $cdir);
  $ip_mask = ~((1 << (32 - $mask)) - 1);
  $ip_net = ip2long($net);
  $remote_net = $remote & $ip_net;
  if ( $remote_net == $ip_net ) {
   $hostallowed=1; break;
  }
}

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Re: Navigation für IP-Bereiche

Beitrag von kummer » Do 9. Feb 2012, 17:01

Oldperl hat geschrieben:
kummer hat geschrieben:...gefragt war eine lösung für die formulierte anforderung.
Stimmt, und da stand halt nix von bekannten Usern bei denen man mit deinen Techniken arbeiten kann, sondern
ich gehe mal davon aus, dass ctschorsch so gut lesen kann wie du, ortwin. aber dazu auch noch verstehen kann, was er liest. dann kann er genau umsetzen, was er braucht.

ich habe zwei varianten aufgezeigt. eine über ip und eine über zertifikate. es gäbe da noch weitere. mutmasslich ist nämlich die idee des ip-ranges auf den umstand zurück zu führen, dass nutzer in einem lan zugelassen sein sollen. denn sonst hilft das ip-range wenig. und in diesem fall gibt eine reihe weiterer möglichkeiten, die ctschorsch halt vielleicht nicht kennt.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

ctschorsch
Beiträge: 101
Registriert: So 21. Nov 2004, 23:48
Kontaktdaten:

Re: Navigation für IP-Bereiche

Beitrag von ctschorsch » Do 9. Feb 2012, 17:11

Hey kummer,

lesen ja, verstehen nicht immer und umsetzen auch nicht immer :))

G

Gesperrt