1. #1
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 590 Times in 319 Posts

    Standard [MyBB] CounterPlugin

    Nach langer Zeit habe ich es geschafft, mich damit zu beschäftigen, wie man sein eigenes MyBB-Plugin entwickelt. Dieses Plugin loggt Seitenaufrufe im Forum, dabei wird das Datum, die IP, der Useragent und Referer in der Datenbank gespeichert.

    Beim Aktivieren des Plugins wird eine neue Tabelle angelegt, falls diese noch nicht existiert. Auch wenn das Plugin deaktiviert wird, bleibt die Tabelle bestehen und wird nicht gelöscht!

    Sourcecode (CounterPlugin.php):

    PHP-Code:
    <?php
    if (!defined("IN_MYBB"))
        {
            die(
    "Direct initialization of this file is not allowed.<br /><br />Please make sure IN_MYBB is defined.");
        }

    $plugins->add_hook("index_start","CounterPlugin_start");
    $plugins->add_hook("announcements_start","CounterPlugin_start");
    $plugins->add_hook("forumdisplay_start","CounterPlugin_start");
    $plugins->add_hook("forumdisplay_thread","CounterPlugin_start");
    $plugins->add_hook("global_start","CounterPlugin_start");
    $plugins->add_hook("memberlist_start","CounterPlugin_start");
    $plugins->add_hook("memberlist_search","CounterPlugin_start");
    $plugins->add_hook("newthread_start","CounterPlugin_start");
    $plugins->add_hook("online_start","CounterPlugin_start");
    $plugins->add_hook("portal_start","CounterPlugin_start");
    $plugins->add_hook("search_start","CounterPlugin_start");
    $plugins->add_hook("showteam_start","CounterPlugin_start");
    $plugins->add_hook("showthread_start","CounterPlugin_start");
    $plugins->add_hook("stats_start","CounterPlugin_start");

    function 
    CounterPlugin_info()
    {
            return Array(
                    
    "name"         => "CounterPlugin",
                    
    "description"  => "Loggt die Seitenaufrufe (IP, Useragent, Referer)",
                    
    "website"      => "http://nicosmtz.de",
                    
    "author"       => "Nico",
                    
    "authorsite"   => "http://nicosmtz.de",
                    
    "version"      => "1.0",
                    
    "compatibility" => "16*"
            
    );
    }
    function 
    CounterPlugin_activate()
    {
            global 
    $db;
            
    $db->query("CREATE TABLE IF NOT EXISTS `".TABLE_PREFIX."counterplugin` (
                          `id` int(11) NOT NULL AUTO_INCREMENT,
                          `datum` varchar(16) NOT NULL,
                          `ip` varchar(100) NOT NULL,
                          `useragent` varchar(255) NOT NULL,
                          `referer` varchar(255) NOT NULL,
                          PRIMARY KEY (`id`)
                        ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;"
    );
    }
    function 
    CounterPlugin_start()
    {
            global 
    $db;
            
    $datum time();
            
    $ip $_SERVER['REMOTE_ADDR'];
            
    $useragent $_SERVER['HTTP_USER_AGENT'];
            
    $referer $_SERVER['HTTP_REFERER'];
            
    $db->query("INSERT INTO ".TABLE_PREFIX."counterplugin (datum,ip,useragent,referer) VALUES ('$datum','$ip','$useragent','$referer');");
    }
    ?>
    Zuerst werden die MyBB-Hooks gesetzt, das sind Einstiegspunkte, wo das Plugin ansetzt, wenn man es denn so nennen kann. (Eine komplette Liste der MyBB-Hooks gibt es hier)

    Ich habe folgende Hooks gewählt:

    PHP-Code:
    $plugins->add_hook("index_start","CounterPlugin_start");
    $plugins->add_hook("announcements_start","CounterPlugin_start");
    $plugins->add_hook("forumdisplay_start","CounterPlugin_start");
    $plugins->add_hook("forumdisplay_thread","CounterPlugin_start");
    $plugins->add_hook("global_start","CounterPlugin_start");
    $plugins->add_hook("memberlist_start","CounterPlugin_start");
    $plugins->add_hook("memberlist_search","CounterPlugin_start");
    $plugins->add_hook("newthread_start","CounterPlugin_start");
    $plugins->add_hook("online_start","CounterPlugin_start");
    $plugins->add_hook("portal_start","CounterPlugin_start");
    $plugins->add_hook("search_start","CounterPlugin_start");
    $plugins->add_hook("showteam_start","CounterPlugin_start");
    $plugins->add_hook("showthread_start","CounterPlugin_start");
    $plugins->add_hook("stats_start","CounterPlugin_start"); 
    Natürlich könnt ihr auch andere Hooks hinzufügen oder entfernen.
    Mit der Funktion add_hook wird ein Hook hinzugefügt, als ersten Parameter übergeben wir hier den Hook, als zweiten die Funktion, die aufgerufen werden soll.

    Dann folgt die Funktion CounterPlugin_info(). Diese Funktion gibt ein Array mit Informationen über das Plugin zurück, wie z.B. Beschreibung, Autor etc.

    PHP-Code:
    function CounterPlugin_info()
    {
            return Array(
                    
    "name"         => "CounterPlugin",
                    
    "description"  => "Loggt die Seitenaufrufe (IP, Useragent, Referer)",
                    
    "website"      => "http://nicosmtz.de",
                    
    "author"       => "Nico",
                    
    "authorsite"   => "http://nicosmtz.de",
                    
    "version"      => "1.0",
                    
    "compatibility" => "16*"
            
    );

    Da wir die Informationen in der Datenbank speichern, aber noch keine Tabelle haben, erstellen wir diese, sobald das Plugin aktiviert wird und die Tabelle noch nicht existiert.

    PHP-Code:
    function CounterPlugin_activate()
    {
            global 
    $db;
            
    $db->query("CREATE TABLE IF NOT EXISTS `".TABLE_PREFIX."counterplugin` (
                          `id` int(11) NOT NULL AUTO_INCREMENT,
                          `datum` varchar(16) NOT NULL,
                          `ip` varchar(100) NOT NULL,
                          `useragent` varchar(255) NOT NULL,
                          `referer` varchar(255) NOT NULL,
                          PRIMARY KEY (`id`)
                        ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;"
    );

    Und zum Schluss folgt noch die Funktion, die aufgerufen wird, wenn man als Besucher einen Hook 'erreicht', also z.B. die Startseite aufruft. Diese Funktion fügt die Daten in die Tabelle ein.

    PHP-Code:
    function CounterPlugin_start()
    {
            global 
    $db;
            
    $datum time();
            
    $ip $_SERVER['REMOTE_ADDR'];
            
    $useragent $_SERVER['HTTP_USER_AGENT'];
            
    $referer $_SERVER['HTTP_REFERER'];
            
    $db->query("INSERT INTO ".TABLE_PREFIX."counterplugin (datum,ip,useragent,referer) VALUES ('$datum','$ip','$useragent','$referer');");

    Theoretisch könnte man noch weitergehen und z.B. für die Useragents eine weitere Tabelle anlegen, auf die wir dann mit Fremdschlüsseln referenzieren, aber das habe ich mir an dieser Stelle gespart.

    CounterPlugin.zip

  2. The Following User Says Thank You to Snees For This Useful Post:

    Devon (07.04.2013)

  3. #2
    Avatar von Devon
    Registriert seit
    18.11.2011
    Beiträge
    2.188
    Thanked 1.574 Times in 1.023 Posts

    Standard AW: [MyBB] CounterPlugin

    Die Einstiegspunkte sind die, wo das Plugin ausgeführt wird - ansetzt hört sich meiner Meinung nach etwas bescheiden an. Auf der deutschen Seite gibts zu den Hooks noch eine ausführliche Erklärung. Die MyBB Hooks unterscheidet man in Hooks mit Argumenten und Hooks ohne Argumenten. Ansonsten: Nettes Plugin, sicher für das eine oder andere nützlich, z.B. könnte man eine erweiterte Statistik daraus bauen welche Seiten z.B. am meisten besucht wurden oder oder oder...

  4. #3
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 590 Times in 319 Posts

    Standard AW: [MyBB] CounterPlugin

    Zitat Zitat von Devon Beitrag anzeigen
    z.B. könnte man eine erweiterte Statistik daraus bauen welche Seiten z.B. am meisten besucht wurden oder oder oder...
    Kommt, wenn ich ein paar Daten gesammelt habe.

  5. #4
    Gelöschter Benutzer
    Gast

    Standard AW: [MyBB] CounterPlugin

    Werden Varaiablen in Queries dirket von MyBB escaped, oder warum machst du das in deinem Script nicht?
    Geändert von Gelöschter Benutzer (07.04.2013 um 16:24 Uhr)

  6. #5

    Registriert seit
    21.01.2013
    Beiträge
    130
    Thanked 241 Times in 47 Posts

    Standard AW: [MyBB] CounterPlugin

    Nein werden sie mit $db->query nicht.
    Habe schon in seinem anderen Thread gesagt dass es SQL Injections einlädt.
    Will er aber nicht verstehen^^

  7. The Following User Says Thank You to AlbionHack For This Useful Post:


  8. #6
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Standard AW: [MyBB] CounterPlugin

    Zitat Zitat von Snees Beitrag anzeigen
    Versuch's mal.

    static void UseVuln (string sqli) {
    byte[] header = Encoding.UTF8.GetBytes(
    "GET /\n" +
    "Host: localhost\n" +
    string.Format("User-Agent:{0}\n", sqli) +
    "Referer: Penis\n\n"
    );
    Socket client = new Socket(SocketType.Stream, ProtocolType.Tcp);
    client.Connect("localhost", 80);
    client.Send(header);
    }


    Wie man direkt sieht gibt es sogar gleich 2 Stellen, an denen man SQL-Code einschleusen kann. REMOTE_ADDR is serverseitig, HTTP_USER_AGENT und HTTP_REFERER sind nur zwei Felder im HTTP-Header die komplett ohne validierung vom Client kommen. Hätte man sich vorher über das Protokoll bzw zumindest diese Variablen informiert wüsste man das.

    Ansonsten hast du wohl noch nie selbst ernsthaft Besucherstatistiken genutzt um aus den Daten sinnvolle Erkentnisse zu gewinnen. Wo sind zb die Zielseiten? Welche Sprache sprechen die Besucher? Warum wird der UserAgent als kompletter String geloggt und nicht auseinandergenommen und in einer seperaten Tabelle gespeichert? Der String beinhaltet ne menge Infos (Browser, Version, Betriebssystem) die sich so in der Form nicht vernünftig auswerten lassen.

    Wenn man schon Besucherstatistiken in der eigenen Datenbank speichert, sollten sie auch zu gebrauchen sein. Sonst ist man mit Diensten wie Google Analytics wesentlich besser dran, da man dort viel mehr Informationen über seine Besucher bekommt und die ganzen Daten auf den Googleservern liegen. Letzteres kann man natürlich zwecks Datenschutz auch als Nachteil sehen, wobei es da auch Mittel und Wege gibt die Daten zu 'entschärfen' (zb durch anonymisieren der IPs).


  9. The Following User Says Thank You to DMW007 For This Useful Post:

    AlbionHack (07.04.2013)

  10. #7

    Registriert seit
    21.01.2013
    Beiträge
    130
    Thanked 241 Times in 47 Posts

    Standard AW: [MyBB] CounterPlugin

    http://coding-net.de/Thema-Webmaster...terPlugin.html


    Ach, aufeinmal geht es? DD
    Aber erst hier groß reden



    Wie wärs wenn du 5 Minuten deiner Zeit nimmst, in die MyBB Dokumentation schaust und dann die sachen mit einem Prepared Statement löst?

Ähnliche Themen

  1. MyBB 1.6.10 veröffentlicht
    Von Devon im Forum Web-Applications
    Antworten: 0
    Letzter Beitrag: 22.04.2013, 14:05
  2. [Source] MyBB-API
    Von Snees im Forum PHP
    Antworten: 20
    Letzter Beitrag: 19.10.2012, 17:59
  3. MyBB 1.8 in den Startlöchern!
    Von Devon im Forum Web-Applications
    Antworten: 1
    Letzter Beitrag: 04.04.2012, 11:21
  4. .PSD Button (MyBB)
    Von Shane im Forum Ressourcen
    Antworten: 0
    Letzter Beitrag: 20.03.2012, 22:44
  5. Mybb Logo anpassen
    Von Kosi im Forum PHP
    Antworten: 1
    Letzter Beitrag: 30.11.2011, 15:44
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.