IP / System / Browser / Provieder - Anzeige im Portal

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mark2
Mitglied
Beiträge: 454
Registriert: 22.02.2006 23:05
Wohnort: Kempten

IP / System / Browser / Provieder - Anzeige im Portal

Beitrag von mark2 »

Ich habe mir nun aus vielen beispielen im www einen php Code zusammengestellt der mir ohne Drittanbieter die Anzeige der im Titel erwähnten Angaben darstellt. Es werden daduch jedem user seine eigenen Daten angezeigt.
Den Code möchte ich in die portal.php einbinden.
Kann ich den Code bedenkenlos verwenden, ohne dass irgend welche Sicherheitlücken dadurch entstehen ?

Code: Alles auswählen

<?php
// Anfang IP und Provider
 $ip = $_SERVER['REMOTE_ADDR'];
    $fullhost = gethostbyaddr($ip);
    $host = preg_replace("/^[^.]+./", "", $fullhost);
// Ende IP und Provider

// Anfang Browser
$useros = $HTTP_USER_AGENT;
$br = strtolower($HTTP_USER_AGENT);

if ((ereg("icab", $br))) {
    $browser = "iCab";
} if ((ereg("netscape6", $br)) || (ereg("netscape 6", $br))) {
    $browser = "Netscape 6";
} elseif ((ereg("netscape7", $br)) || (ereg("netscape 7", $br))) {
    $browser = "Netscape 7";
} elseif (ereg("konqueror", $br)) {
    $browser = "Konqueror";
} elseif (ereg("lynx", $br)) {
    $browser = "Lynx";
} elseif ((ereg("firefox", $br)) AND ((!ereg("firebird", $br)) && (!ereg("/4.", $br)) && (!ereg("gold", $br))  )) {
    $brl=strlen($br);
    $par=substr(strrchr($br, ")"), 1); $parl=strlen($par);
    $dos=substr(strrchr($br, ":"), 1); $dosl=strlen($dos); $verl=$dosl-$parl;
    $ver=substr($br, ($brl-$dosl), ($verl-1));
    $browser = "Mozilla Firefox ".$ver;
} elseif ((ereg("mozilla", $br)) AND ((!ereg("msie", $br)) && (!ereg("/4.", $br)) && (!ereg("gold", $br))  )) {
    $brl=strlen($br);
    $par=substr(strrchr($br, ")"), 1); $parl=strlen($par);
    $dos=substr(strrchr($br, ":"), 1); $dosl=strlen($dos); $verl=$dosl-$parl;
    $ver=substr($br, ($brl-$dosl), ($verl-1));
    $browser = "Mozilla ".$ver;
} elseif (ereg("msie", $br)) {
    if (ereg("msie 4.0", $br)) {
    $browser = "Internet Explorer 4";
    } elseif (ereg("msie 5.0", $br)) {
    $browser = "Internet Explorer 5";
    } elseif (ereg("msie 5.1", $br)) {
    $browser = "Internet Explorer 5.1";
    } elseif (ereg("msie 5.2", $br)) {
    $browser = "Internet Explorer 5.2";
    } elseif (ereg("msie 5.5", $br)) {
    $browser = "Internet Explorer 5.5";
    } elseif (ereg("msie 6.0", $br)) {
    $browser = "Internet Explorer 6";
    } elseif (ereg("msie 7.0", $br)) {
    $browser = "Internet Explorer 7";
    }
} elseif (ereg("opera", $br)) {
    if (ereg("opera/4", $br)) {
    $browser = "Opera 4";
    } elseif (ereg("opera/5", $br)) {
    $browser = "Opera 5";
    } elseif (ereg("opera/6", $br)) {
    $browser = "Opera 6";
    }
} elseif ((ereg("gold", $br))) {
    $browser = "Netscape 3";
} elseif ((ereg("nav", $br)) || (ereg("netscape", $br)) || (ereg("/4.", $br))) {
    $browser = "Netscape 4";
} else { $browser = "other"; }
// Ende Browser

// Anfang Betriebssystem
if (strstr($useros, "Win")) {
    if (strstr($useros, "NT 5.0") ||
        strstr($useros, "NT5.0") ||
        strstr($useros, " 2000"))
         {$os = "Microsoft Windows 2000";}
    else if (strstr($useros, "NT 5.1") ||
             strstr($useros, "NT5.1") ||
             strstr($useros, "Windows XP"))
         {$os = "Microsoft Windows XP";}
    else if (strstr($useros, "NT 6.0") ||
             strstr($useros, "Windows Vista"))
         {$os = "Microsoft Vista";}
    else if (strstr($useros, "Win98") ||
             strstr($useros, "Windows 98"))
         {$os = "Microsoft Windows 98";}
    else if (strstr($useros, "NT"))
    	{$os="Microsoft Windows NT";}
    else if (strstr($useros, "Win95") ||
             strstr($useros, "Windows 95"))
         {$os = "Microsoft Windows 95";}
    else if (strstr($useros, "WinME") ||
             strstr($useros, "Windows ME"))
         {$os = "Microsoft Windows ME";}
    else {$os = "other Microsoft Windows";}

} else if (strstr($useros, "Mac")) {
       $os = "Apple Macintosh";
} else if (strstr($useros, "Linux")) {
       $os = "Linux";
} else if (strstr($useros, "Unix")) {
       $os = "Unix";
} else if (strstr($useros, "SunOS")) {
       $os = "SunOS";
} else if (strstr($useros, "FreeBSD")) {
       $os = "FreeBSD";
} else {
       $os = "Other";
}
// Ende Betriebssystem

// Ausgabe
echo "System: $os  <br>Browser: $browser<br>";
echo "Provider: $host  <br>IP: $ip";
?>
Vielen Dank
Gruß Markus
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Man sieht das es zusammenkopiert wurde :D

Du verwendest preg* und ereg*

preg ist angeblich schneller.

Das mit dem vielen elseif ist nicht umbedingt schön, vielleicht wäre eine bessere RegEx sinnvoller oder switch.

Ich glaube anstatt von $HTTP_USER_AGENT sollte man $_SERVER['HTTP_USER_AGENT'] oder war es $_SERVER['USER_AGENT'] verwenden (Eins davon sollte es sein:wink: )

Die Funktion gethostbyaddr() kannte ich bisher garnicht, wieder etwas dazu gelernt :)

Du solltest wenn du phpBB benutzt das Templatesystem nutzen.

Sicherheit:
Wenn du das vor Datenbank-Eintragungen richtig escapest sollte es kein Problem geben.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
mark2
Mitglied
Beiträge: 454
Registriert: 22.02.2006 23:05
Wohnort: Kempten

Beitrag von mark2 »

Leider kann man ereg nicht einfach gegen preg tauschen. preg alleine gibt es schon mal nicht. Das einzige was keinen Fehler verursacht währe preg_quote aber da passt dann das Ergebnis auch nicht mehr.
Wenn ich mir die Beschreibung von ereg ansehe und die mit preg vergleiche würde ich eigentlich preg_match sagen.
Nur der Befehl scheint was gegen Buchsteben zu haben.

Code: Alles auswählen

Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in ...................
Um das zu ändern muß wohl der Zeileinhalt stärker verändert werden, was ich nicht kann.
Gruß Markus
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

preg_match('#irgendwas#', .....

der Sogenannte Delimiter begrenzt die Suche (in dem Fall ist es #)nach dem letzen Delimiter kannst du ein paar Einstellungen ändern, z.B. Groß und Kleinschreibung beachten, Gieriges Verhalten etc.

RegEx zu benutzen ist nicht umbedingt einfach, man muss teilweise schon etwas mehr denken als sonst üblich, zumindest geht mir das so.
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
mark2
Mitglied
Beiträge: 454
Registriert: 22.02.2006 23:05
Wohnort: Kempten

Beitrag von mark2 »

Ok das '#irgendwas#' funktioniert. :grin:

Zu dem Punkt
Sicherheit:
Wenn du das vor Datenbank-Eintragungen richtig escapest sollte es kein Problem geben.
Vor Datenbank-Eintragungen ?
Ich habe den Codeblock ganz oben eingefügt.

Escapen ?
Ist damit der Übertrag in die tpl gemeint ?

Meine portal.phpsieht dann so aus.
Gruß Markus
Antworten

Zurück zu „Coding & Technik“