Seite 1 von 1

IP / System / Browser / Provieder - Anzeige im Portal

Verfasst: 30.07.2008 18:06
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

Verfasst: 30.07.2008 19:33
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.

Verfasst: 30.07.2008 21:35
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.

Verfasst: 30.07.2008 22:09
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.

Verfasst: 30.07.2008 23:32
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.