Automatische Erkennung der Forum-Engine. Automatische Erkennung der Forum-Engine-Daten aus dem Index-PHP-Board


Die Datei index.php ist die Schlüsseldatei des Forums und wird für fast alle Aktionen verwendet. Seine Arbeit besteht aus folgenden Phasen:
1)Verbindung Konfigurationsdateien Datenbank.php und iboard.php.
2) Herstellen einer Verbindung zum DBMS und Zugriff auf die Datenbank.
3)Informationen lesen von Benutzercookies oder aus den an das Skript übergebenen Parametern, um Informationen über diesen Benutzer aus der Datenbank zu extrahieren und seine Authentizität zu überprüfen.
4) Im Falle einer erfolglosen Verifizierung (oder fehlender Benutzerinformationen) werden die Daten für das Gastbenutzerprofil als Benutzerdaten abgerufen ( Registrierungs Nummer - 1).
5) Die Style- und Interface-Sprachdateien sind verbunden, benutzerdefinierte in Ihren Profileinstellungen.
6) Wenn der t-Parameter in den Parametern des Skriptaufrufs vorhanden ist, dann Daten zum angegebenen Thema und Forum, in dem dieses Thema gelegen.
7) Wenn der f-Parameter in den Parametern des Skriptaufrufs vorhanden ist, werden Daten über das Forum aus der Datenbank extrahiert.
8) Wenn die Parameter t oder f vorhanden sind, wird geprüft, ob der Benutzer über ausreichende Rechte verfügt, um das entsprechende Forum anzuzeigen.
9) Das im Parameter m angegebene Modul ist angeschlossen. Wenn der Parameter m fehlt, wird der Modultyp abhängig von der Art der Partition bestimmt, für die der diese Aktion. Wenn der Abschnittstyp nicht angegeben ist, wird geprüft, als was angezeigt werden soll Startseite. Wenn einer der Abschnitte als Hauptseite ausgewählt wird, wird das Modul angeschlossen, das für die Anzeige des Abschnitts des entsprechenden Typs verantwortlich ist, andernfalls wird das Modul main.php verbunden. Außerdem ist eine Style-Datei enthalten, die den gleichen Namen wie das Plug-in trägt, sich jedoch in einem Unterverzeichnis des Styles-Verzeichnisses befindet, das dem in den Benutzerprofileinstellungen ausgewählten Style entspricht.
10) Parameter a wird überprüft. Wenn nicht explizit angegeben, wird es als gleich view deklariert. Wenn als Nächstes ein bestimmter Abschnitt angegeben ist und der Parameter „Ansicht“ lautet, wird er durch ersetzt<имя_раздела>_Sicht.
11)Abhängig von der angeforderten Aktion (wird im Skriptaufrufparameter a angegeben) wird entweder die Datei tmplate1.php (wenn die Aktion das Präfix do_ nicht enthält) oder die Datei tmplate2.php (andernfalls) angebunden. Als nächstes werden alle in der entsprechenden Vorlage aufgeführten Aktionen aufgerufen, und anstelle der Aktion main_action wird tatsächlich die im Parameter a angegebene Aktion aufgerufen.
12) Das Forum-Protokoll enthält Informationen über die durchgeführte Aktion, die Kennung und die IP-Adresse des Benutzers, der die Aktion durchgeführt hat.
Außerdem gibt es in der Datei index.php eine Funktion zur Behandlung schwerwiegender Fehler, die eine Fehlermeldung anzeigen und den Fehlertext in der Datei error.log aufzeichnen soll.

Beginnen wir gleich mit dem Hauptskriptcode:

#!/usr/bin/perl

# which-forum.pl-Skript
# (c) 2010 Alexandr A Alexeev, http://site/

streng verwenden;

# kommentierte Zeilen – aus Gründen der Genauigkeit
# Wenn die Aufgabe darin besteht, Engine-Statistiken zu sammeln, lassen Sie sie unverändert
# Wenn Sie eine Liste mit Foren erstellen, entfernen Sie den Kommentar

meine $data ;
$data .= $_while (<> ) ;

# Überprüfen Sie, wie viel Powered by phpBB ohne Link in der Fußzeile gekostet hat
Drucken Sie „phpbb \N"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?phpbb\.com\/?"[^>]*>phpBB/i oder
# $data =~ /viewforum\.php\?[^""]*f=\d+/i or
$data =~ /phpBB\-SEO/i oder
$data =~ /) ;
Drucken Sie „ipb \N"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?invision(?:board|power)\.com\/?[^"]*"[^>]*> [^<]*IP\.Board/i oder
$data =~ /]+href="[^"]*http:\/\/(?:www\.)?invisionboard\.com\/?"[^>]*>Invision Power Board/i oder
$data =~ /

/ich oder
$data =~ /index\.php\?[^""]*showforum=\d+/i) ;
Drucken Sie „vbulletin \N"
if ($data =~ /Unterstützt von:?[^<]+vBulletin[^<]+(?:Version)?/i oder
$data =~ /) ;
Drucken Sie „smf \N"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?simplemachines\.org\/?"[^>]*>Powered by SMF/i oder
$data =~ /index\.php\?[^""]*board=\d+\.0/i) ;
Drucken Sie „punbb \N"
if ($data =~ /]+href="[^"]*http:\/\/(?:(?:www\.)?punbb\.org|punbb\.informer\.com)\/?"[^>]*> PunBB/i); #oder
# $data =~ /viewforum\.php\?[^""]*id=\d+/i);
Drucken Sie „fluxbb \N"
# if($data =~ /viewtopic\.php\?id=\d+/i or
if ( $data =~ /]+href="http:\/\/(?:www\.)fluxbb\.org\/?"[^>]*>FluxBB/i) ;
Drucken Sie „exbb \N"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?exbb\.org\/?"[^>]*>ExBB/i); # oder
# $data =~ /forums\.php\?[^""]*forum=\d+/i);
Drucken Sie „yabb \N"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?yabbforum\.com\/?"[^>]*>YaBB/i oder
$data =~ /YaBB\.pl\?[^""]*num=\d+/i ) ;
Drucken Sie „dleforum \N"
if ($data =~ /\(Unterstützt vom DLE-Forum\)<\/title>/ich oder
$data =~ /]+href="[^"]+(?:http:\/\/(?:www\.)?dle\-files\.ru|act=copyright)[^"]*">DLE-Forum<\/a>/ich) ;
Drucken Sie „ikonboard \N"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?ikonboard\.com\/?[^"]*"[^>]*>Ikonboard/i oder
$data =~ /
if ($data =~ /
# if($data =~ /forums\.php\?fid=\d+/i or
# $data =~ /topic\.php\?fid=\d+/i oder
if ($data =~ /]+href="http:\/\/(?:www\.)?flashbb\.net\/?"[^>]*>FlashBB/i) ;
Drucken Sie „stokesit \N"
# if($data =~ /forum\.php\?f=\d+/i or
if ($data =~ /]+href="http:\/\/(?:www\.)?stokesit\.com\.au\/?"[^>]*>[^\/]*Stokes IT/i) ;
Aufdruck „Podium \N"
# if($data =~ /topic\.php\?t=\d+/i or
if ($data =~ /]+href=[""]?http:\/\/(?:www\.)?sopebox\.com\/?[""]?[^>]*>Podium/i) ;
Drucken Sie „usebb \N"
# if($data =~ /forum\.php\?id=\d+/i or
if ($data =~ /]+href="http:\/\/(?:www\.)?usebb\.net\/?"[^>]*>UseBB/i) ;
Drucken Sie „wrforum \N"
# if($data =~ /index\.php\?fid=\d+/i or
if ($data =~ /]+href="http:\/\/(?:www\.)?wr\-script\.ru\/?"[^>]*>WR\-Forum/i) ;
Drucken Sie „yetanotherforumnet \N"
if ($data =~ /Yet Another Forum\.net/i oder
$data =~ /default\.aspx\?g=posts&t=\d+/i) ;

Dieses und weitere im Beitrag erwähnte Skripte finden Sie in diesem Archiv.

Skript which-forum.pl untersucht den HTML-Seitencode, um zu sehen, ob er Signaturen der Forum-Engine enthält. Bei der Definition von WordPress und Joomla haben wir eine ähnliche Technik verwendet, es gibt jedoch einige Unterschiede. Erstens lädt das Skript selbst den Seitencode nicht, sondern liest ihn aus stdin oder einer als Argument übergebenen Datei. Auf diese Weise können Sie die Seite einmal herunterladen, beispielsweise mit wget, und sie dann durch mehrere Analysegeräte laufen lassen, falls wir mehr als eines haben. Zweitens ist in diesem Skript das Vorhandensein einer Signatur zu 100 % ein Zeichen der Engine. Beim letzten Mal erhöhte das Vorhandensein einer Signatur nur das Gewicht des entsprechenden Motors und der Motor mit dem größten Gewicht „gewonnen“. Ich kam zu dem Schluss, dass ein solcher Ansatz in diesem Fall den Code nur unnötig komplizieren würde.

Um das Skript zu testen, habe ich etwas recherchiert. Ich habe eine Liste von mehreren tausend Foren zusammengestellt und jedes davon durch mein Skript laufen lassen, um so den Prozentsatz der Programmantworten und die Beliebtheit verschiedener Engines zu ermitteln.

Um die Liste der Foren zu erhalten, habe ich meinen Google-Parser verwendet. Suchmaschine Anfragen wie

site:forum.*.ru
site:talk.*.ru
site:board.*.ru
site:smf.*.ru
site:phpbb.*.ru
....

usw. Vollständiger Code Sie finden den Abfragegenerator in der Datei gen-forumsearch-urls.pl. Neben zone.ru wurden auch .su .ua .kz und .by verwendet. Beim letzten Mal war es schwierig, eine solche Studie durchzuführen, da WordPress- und Joomla-Sites keine solchen Signaturen in der URL haben. Kataloge wie cmsmagazine.ru/catalogue/ bieten keine ausreichende Stichprobengröße. Was sind 600 Drupal-Sites?

Ich muss zugeben, dass mich die Ergebnisse des Experiments enttäuscht haben. Von den 12.590 untersuchten Standorten konnte die Engine nur an 7.083, also nur in 56 % der Fälle, erfolgreich identifiziert werden. Vielleicht habe ich einen Motor nicht berücksichtigt? Stimmte es wirklich, dass in der Hälfte der Foren Bitrix installiert war? Oder hätte ich mehr Zeit mit der Suche nach Unterschriften verbringen sollen? Generell besteht hier zusätzlicher Forschungsbedarf.

Unter den 56 % der erfolgreich identifizierten Engines waren erwartungsgemäß IPB (31 %), phpBB (26,6 %) und vBulletin (26,5 %) am beliebtesten.

Mit großem Abstand folgen SMF (5,8 %) und DLEForum (5,3 %). Mein Lieblings-PunBB lag nur auf dem 6. Platz (1,64 %). Ich würde nicht empfehlen, großen Wert auf diese Zahlen zu legen (man sagt, dass jedes dritte Forum im RuNet auf IPB läuft), aber bestimmte Schlussfolgerungen lassen sich natürlich daraus ziehen.

Wenn Sie beispielsweise beabsichtigen, eine Website auf einer Forum-Engine zu erstellen und das Forum zu modifizieren, beispielsweise den Benutzern 0,01 $ für jede Nachricht zu zahlen und einmal pro Woche automatisch Geld abzuheben, sollten Sie eine der drei beliebtesten Engines wählen. Je beliebter das Forum ist, desto größer sind die Chancen, einen Programmierer zu finden, der sich darin gut auskennt.

Wenn keine wesentlichen Änderungen an der Engine zu erwarten sind, kann es sinnvoll sein, eine weniger beliebte Engine zu wählen, beispielsweise SMF oder punBB. Dadurch wird die Anzahl der Hackerangriffe auf Ihr Forum und die Menge an automatisch versendetem Spam reduziert.

Skripte zum Suchen/Identifizieren von Foren können auch in mehr als einem gefunden werden praktischer Nutzen. Das erste, was mir in den Sinn kam, war, die identifizierten Foren nach TIC zu sortieren und in den ersten hundert Beiträgen mit Links zu einer meiner Websites zu posten. Allerdings hatten Hunderte von Dofollow-Links im Forum keinerlei Auswirkungen auf die TCI (2 Aktualisierungen wurden durchgeführt), daher ist es besser, hier keine Zeit zu verschwenden, es sei denn, Sie sind nicht an Übergängen interessiert.

Es ist klar, dass die erwähnte Verwendung von Skripten bei weitem nicht die einzige ist. Ich denke, Sie können leicht herausfinden, wie Sie sie sonst noch verwenden können.

Bestimmt Module müssen mit der Hardware kommunizieren, um ihre Aufgaben zu erledigen. Diese Module verfügen über eine zusätzliche Treiberschicht. Jeder Treiber benötigt dann eine Board-Datei, um mit der tatsächlichen Hardware zu kommunizieren.
Die Board-Datei muss vom Benutzer bereitgestellt werden, da ihre Implementierung nicht nur vom verwendeten zugrunde liegenden System (HAL), sondern auch von der tatsächlichen Hardwarekonfiguration (Verkabelung) abhängt.

Vorlagen

Jeder Treiber stellt eine Vorlage seiner Board-Datei bereit. Sie müssen lediglich diese Datei in Ihr Projektverzeichnis kopieren und die Routinen implementieren. Beachten Sie, dass Sie den _template-Teil aus dem Dateinamen entfernen müssen.

Unterstützte Boards

Auf einigen Boards ist Hardware vordefiniert. Wenn es sich um ein gemeinsames Board handelt, stellen wir ein Makefile bereit ( /boards/base/xxx/board.mk), die Sie in Ihr eigenes Projekt-Makefile einbinden können. Darin sind dann automatisch alle Standard-Hardwaretreiber und Board-Dateien enthalten. Weitere vordefinierte Board-Dateien finden Sie auch in /boards/addons.



Wird geladen...
Spitze