Devon (07.04.2013)
Thema: [MyBB] CounterPlugin
-
07.04.2013, 15:33 #1
[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');");
}
?>
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");
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*"
);
}
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 ;");
}
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');");
}
CounterPlugin.zip
-
The Following User Says Thank You to Snees For This Useful Post:
-
07.04.2013, 15:39 #2
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...
-
07.04.2013, 15:44 #3
-
07.04.2013, 16:21 #4Gelöschter BenutzerGast
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)
-
07.04.2013, 16:25 #5
- Registriert seit
- 21.01.2013
- Beiträge
- 130
Thanked 241 Times in 47 PostsAW: [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^^
-
The Following User Says Thank You to AlbionHack For This Useful Post:
-
07.04.2013, 17:38 #6
- Registriert seit
- 15.11.2011
- Beiträge
- 6.262
- Blog Entries
- 5
Thanked 9.145 Times in 3.019 PostsAW: [MyBB] CounterPlugin
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).
-
The Following User Says Thank You to DMW007 For This Useful Post:
AlbionHack (07.04.2013)
-
07.04.2013, 19:39 #7
- Registriert seit
- 21.01.2013
- Beiträge
- 130
Thanked 241 Times in 47 PostsAW: [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
-
MyBB 1.6.10 veröffentlicht
Von Devon im Forum Web-ApplicationsAntworten: 0Letzter Beitrag: 22.04.2013, 14:05 -
[Source] MyBB-API
Von Snees im Forum PHPAntworten: 20Letzter Beitrag: 19.10.2012, 17:59 -
MyBB 1.8 in den Startlöchern!
Von Devon im Forum Web-ApplicationsAntworten: 1Letzter Beitrag: 04.04.2012, 11:21 -
.PSD Button (MyBB)
Von Shane im Forum RessourcenAntworten: 0Letzter Beitrag: 20.03.2012, 22:44 -
Mybb Logo anpassen
Von Kosi im Forum PHPAntworten: 1Letzter Beitrag: 30.11.2011, 15:44
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.