Automatická detekcia nástroja fóra. Automatická detekcia nástroja fóra Index súborov php dosky

Začnime hneď s hlavným kódom skriptu:

#!/usr/bin/perl

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

používať prísne;

# komentované riadky - pre prísnosť
# ak je úlohou zbierať štatistiky motora, nechajte to tak
# ak vytvoríte zoznam fór - odkomentujte

moje $data ;
$data .= $_ while (<> ) ;

# skontrolujte, koľko bolo Powered by phpBB bez odkazu v päte
vytlačiť "phpbb \n"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?phpbb\.com\/?"[^>]*>phpBB/i alebo
# $data =~ /viewforum\.php\?[^""]*f=\d+/i alebo
$data =~ /phpBB\-SEO/i alebo
$data =~ /) ;
vytlačiť "ipb \n"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?invision(?:board|power)\.com\/?[^"]*"[^>]*> [^<]*IP\.Board/i alebo
$data =~ /]+href="[^"]*http:\/\/(?:www\.)?invisionboard\.com\/?"[^>]*>Invision Power Board/i alebo
$data =~ /

/i alebo
$data =~ /index\.php\?[^""]*showforum=\d+/i) ;
vytlačiť "vbulletin \n"
if ($data =~ /Používa:?[^<]+vBulletin[^<]+(?:Version)?/i alebo
$data =~ /) ;
vytlačiť "smf \n"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?simplemachines\.org\/?"[^>]*>Využíva SMF/i alebo
$data =~ /index\.php\?[^""]*board=\d+\.0/i) ;
vytlačiť „punbb \n"
if ($data =~ /]+href="[^"]*http:\/\/(?:(?:www\.)?punbb\.org|punbb\.informer\.com)\/?"[^>]*> PunBB/i); #alebo
# $data =~ /viewforum\.php\?[^""]*id=\d+/i);
tlač "fluxbb \n"
# if($data =~ /viewtopic\.php\?id=\d+/i alebo
if ( $data =~ /]+href="http:\/\/(?:www\.)fluxbb\.org\/?"[^>]*>FluxBB/i) ;
vytlačiť "exbb \n"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?exbb\.org\/?"[^>]*>ExBB/i); # alebo
# $data =~ /forums\.php\?[^""]*forum=\d+/i);
vytlačiť "yabb \n"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?yabbforum\.com\/?"[^>]*>YaBB/i alebo
$data =~ /YaBB\.pl\?[^""]*num=\d+/i );
vytlačiť „dleforum \n"
if ($data =~ /\(Používa fórum DLE\)<\/title>/i alebo
$data =~ /]+href="[^"]+(?:http:\/\/(?:www\.)?dle\-files\.ru|act=copyright)[^"]*">Fórum DLE<\/a>/i) ;
vytlačiť "ikonu \n"
if ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?ikonboard\.com\/?[^"]*"[^>]*>Ikonboard/i alebo
$data =~ /\n"
if ($data =~ /
# if($data =~ /forums\.php\?fid=\d+/i alebo
# $data =~ /topic\.php\?fid=\d+/i alebo
if ($data =~ /]+href="http:\/\/(?:www\.)?flashbb\.net\/?"[^>]*>FlashBB/i) ;
vytlačiť „stokesit \n"
# if($data =~ /forum\.php\?f=\d+/i alebo
if ($data =~ /]+href="http:\/\/(?:www\.)?stokesit\.com\.au\/?"[^>]*>[^\/]*Stokes IT/i) ;
vytlačiť „pódium \n"
# if($data =~ /topic\.php\?t=\d+/i alebo
if ($data =~ /]+href=[""]?http:\/\/(?:www\.)?sopebox\.com\/?[""]?[^>]*>Podium/i) ;
print "usebb \n"
# if($data =~ /forum\.php\?id=\d+/i alebo
if ($data =~ /]+href="http:\/\/(?:www\.)?usebb\.net\/?"[^>]*>UseBB/i) ;
vytlačiť "wrforum \n"
# if($data =~ /index\.php\?fid=\d+/i alebo
if ($data =~ /]+href="http:\/\/(?:www\.)?wr\-script\.ru\/?"[^>]*>WR\-Forum/i) ;
vytlačiť „etanotherforumnet \n"
if ($data =~ /Ešte ďalšie fórum\.net/i alebo
$data =~ /default\.aspx\?g=posts&t=\d+/i) ;

Tento a ďalšie skripty uvedené v príspevku nájdete v tomto archíve.

Skript which-forum.pl skúma kód stránky html na prítomnosť podpisov nástroja fóra. Pri definovaní WordPress a Joomla sme použili podobnú techniku, ale existuje niekoľko rozdielov. Po prvé, samotný skript nenačíta kód stránky, ale načíta ho z stdin alebo súboru odovzdaného ako argument. To nám umožňuje stiahnuť si stránku raz, napríklad pomocou wget, a potom ju spustiť cez niekoľko parserov, ak ich máme viac. Po druhé, v tomto skripte je prítomnosť podpisu 100% znakom motora. Naposledy prítomnosť podpisu dodala váhu iba zodpovedajúcemu motoru a „vyhrala“ motor s najvyššou hmotnosťou. Rozhodol som sa, že v tomto prípade by takýto prístup len zbytočne skomplikoval kód.

Aby som otestoval scenár, urobil som si malý prieskum. Zostavil som zoznam niekoľkých tisícok fór a každé z nich som spustil cez svoj skript, čím som určil percento aktivácií programu a popularitu rôznych motorov.

Na získanie zoznamu fór som použil môj analyzátor Google. vyhľadávač posielať žiadosti ako

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

a tak ďalej. Úplný kód generátor dotazov nájdete v súbore gen-forumsearch-urls.pl. Okrem zóny .ru sa používali aj .su, .ua, .kz a .by. Naposledy bolo ťažké vykonať takúto štúdiu, pretože stránky WordPress a Joomla takéto podpisy v adrese URL nemajú. Katalógy ako cmsmagazine.ru/catalogue/ neposkytujú dostatočnú veľkosť vzorky. Čo je 600 stránok na Drupale?

Musím priznať, že výsledky experimentu ma sklamali. Z 12 590 skúmaných miest sa podarilo identifikovať iba 7 083 motorov, teda len v 56 % prípadov. Možno som nebral do úvahy nejaký motor? Stál Bitrix na polovici fór? Alebo som mal stráviť viac času hľadaním podpisov? Vo všeobecnosti je tu potrebný ďalší výskum.

Spomedzi 56 % úspešne identifikovaných motorov boli podľa očakávania najobľúbenejšie IPB (31 %), phpBB (26,6 %) a vBulletin (26,5 %).

Tesne za nimi nasledujú SMF (5,8 %) a DLEForum (5,3 %). Môj obľúbený punBB bol až na 6. mieste (1,64 %). Nedoporučoval by som silne dôverovať týmto číslam (hovoria, že každé tretie fórum v Runete funguje na IPB), ale určité závery sa, samozrejme, dajú vyvodiť.

Napríklad, ak máte v úmysle vytvoriť stránku na nástroji fóra a plánujete upraviť fórum, povedzme, zaplatiť používateľom 0,01 $ za každú správu s automatickým výberom prostriedkov raz týždenne, potom by ste si mali vybrať jeden z troch najpopulárnejších nástrojov . Čím je fórum populárnejšie, tým je pravdepodobnejšie, že sa nájde programátor, ktorý sa v ňom dobre vyzná.

Ak sa neočakávajú žiadne výrazné zmeny v motore, potom môže mať zmysel vybrať si menej populárny motor, ako napríklad SMF alebo punBB. Týmto spôsobom znížite počet hackerských útokov na vaše fórum a množstvo automaticky odosielaného spamu.

Skripty na vyhľadávanie/definovanie fór môžu tiež nájsť viacero praktické využitie. Prvé, čo ma osobne napadlo, bolo zoradiť identifikované fóra podľa TCI a umiestniť príspevky s odkazmi na niektorú z ich stránok do prvej stovky. Sto odkazov na fórum dofollow však nijako neovplyvnilo TCI (prešli 2 aktualizácie), takže tu je lepšie nestrácať čas, pokiaľ vás prechody nezaujímajú.

Je jasné, že menované využitie skriptov nie je zďaleka jediné. Myslím, že môžete ľahko zistiť, ako inak ich môžete použiť.

Niektoré moduly musia komunikovať s hardvérom, aby mohli plniť svoje úlohy. Tieto moduly sa dodávajú s ďalšou vrstvou ovládača. Každý ovládač potom potrebuje súbor dosky, aby mohol komunikovať so skutočným hardvérom.
Súbor dosky musí poskytnúť používateľ, pretože jeho implementácia závisí nielen od použitého základného systému (HAL), ale aj od aktuálnej konfigurácie hardvéru (káblovania).

Šablóny

Každý ovládač poskytuje šablónu súboru dosky. Stačí skopírovať tento súbor do adresára projektu a implementovať rutiny. Upozorňujeme, že z názvu súboru musíte odstrániť časť _template.

Podporované dosky

Niektoré dosky majú preddefinovaný hardvér. Tam, kde sú bežnou doskou, poskytujeme makefile ( /boards/base/xxx/board.mk), ktorý môžete zahrnúť do vlastného súboru makefile projektu. To potom automaticky zahrnie všetky štandardné ovládače hardvéru a súbory dosky. Ďalšie preddefinované súbory dosky možno tiež nájsť v /boards/addons.


Súbor index.php je kľúčovým súborom fóra a používa sa takmer vo všetkých akciách. Jeho práca pozostáva z nasledujúcich krokov:
1) Pripojenie konfiguračné súbory database.php a iboard.php.
2) Vytvorenie spojenia s DBMS a získanie prístupu k databáze.
3) Čítanie informácií z užívateľské cookies alebo z parametrov odovzdaných skriptu, extrahovanie informácií o tomto používateľovi z databázy a overenie jeho pravosti.
4) V prípade neúspešného overenia (alebo nedostatku informácií o používateľovi) sa údaje pre používateľský profil Hosť načítajú ako používateľské údaje ( evidenčné číslo - 1).
5) Pripojenie súborov štýlov a jazyka rozhrania, definované užívateľom v nastaveniach svojho profilu.
6)Ak je parameter t prítomný v parametroch volania skriptu, potom sa údaje o zadanej téme a fóre získajú z databázy, v ktorej táto téma Nachádza.
7)Ak je parameter f prítomný v parametroch volania skriptu, potom sa údaje o fóre získajú z databázy.
8) Ak sú prítomné parametre t alebo f, vykoná sa kontrola, či má používateľ dostatočné práva na zobrazenie príslušného fóra.
9) Modul uvedený v parametri m sa pripája. Ak parameter m chýba, typ modulu sa určí v závislosti od typu oddielu, pre ktorý je túto akciu. Ak nie je špecifikovaný typ sekcie, vykoná sa kontrola toho, ako sa má zobraziť domovskej stránke. V prípade, že je jedna zo sekcií vybratá ako hlavná stránka, potom sa pripojí modul zodpovedný za zobrazenie sekcie zodpovedajúceho typu, v opačnom prípade modul main.php. Súčasťou je aj súbor štýlov, ktorý má rovnaký názov ako doplnok, ale nachádza sa v podadresári adresára štýlov, ktorý zodpovedá štýlu vybranému v nastaveniach užívateľského profilu.
10) Parameter a je zaškrtnutý. Ak nie je explicitne nastavený, je deklarovaný ako rovnaký ako zobrazenie. Ďalej, ak je špecifikovaná špecifická sekcia a parameter a sa rovná view, nahradí sa<имя_раздела>_vyhliadka.
11) V závislosti od požadovanej akcie (je určená v parametri volania skriptu a) je pripojený buď súbor tmplate1.php (ak akcia neobsahuje predponu do_), alebo súbor tmplate2.php (inak). Ďalej sa zavolajú všetky akcie uvedené v príslušnej šablóne a namiesto akcie main_action sa skutočne zavolá akcia špecifikovaná v parametri a.
12) Protokol fóra obsahuje informácie o vykonanej akcii, identifikátor a IP adresu používateľa, ktorý akciu vykonal.
V súbore index.php je tiež funkcia na spracovanie fatálnych chýb, ktorá je určená na zobrazenie chybového hlásenia, ako aj na opravu chybového textu v súbore error.log.

Načítava...
Hore