Automatsko otkrivanje mehanizma foruma. Automatsko otkrivanje forumskog motora File indeks php board

Počnimo odmah s glavnim kodom skripte:

#!/usr/bin/perl

# which-forum.pl skripta
# (c) 2010 Aleksandr A Aleksejev, http://website/

koristiti strict;

# komentarisani red - za strogost
# ako je zadatak prikupiti statistiku motora, ostavite je kako jeste
# ako napravite listu foruma - dekomentirajte

moji $data ;
$data .= $_ dok (<> ) ;

# provjerite koliko ih je Powered by phpBB bez linka u podnožju
print "phpbb \n"
ako ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?phpbb\.com\/?"[^>]*>phpBB/i ili
# $data =~ /viewforum\.php\?[^""]*f=\d+/i ili
$data =~ /phpBB\-SEO/i ili
$data =~ /) ;
print "ipb \n"
ako ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?invision(?:board|power)\.com\/?[^"]*"[^>]*> [^<]*IP\.Board/i ili
$data =~ /]+href="[^"]*http:\/\/(?:www\.)?invisionboard\.com\/?"[^>]*>Invision Power Board/i ili
$data =~ /

/i ili
$data =~ /index\.php\?[^""]*showforum=\d+/i) ;
print "vbulletin \n"
ako ($data =~ /Pokreće:?[^<]+vBulletin[^<]+(?:Version)?/i ili
$data =~ /) ;
print "smf \n"
ako ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?simplemachines\.org\/?"[^>]*>Pokreće SMF/i ili
$data =~ /index\.php\?[^""]*board=\d+\.0/i) ;
print "punbb \n"
ako ($data =~ /]+href="[^"]*http:\/\/(?:(?:www\.)?punbb\.org|punbb\.informer\.com)\/?"[^>]*> PunBB/i) ; #or
# $data =~ /viewforum\.php\?[^""]*id=\d+/i);
print "fluxbb \n"
# if($data =~ /viewtopic\.php\?id=\d+/i ili
if ( $data =~ /]+href="http:\/\/(?:www\.)fluxbb\.org\/?"[^>]*>FluxBB/i) ;
print "exbb \n"
ako ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?exbb\.org\/?"[^>]*>ExBB/i) ; # ili
# $data =~ /forums\.php\?[^""]*forum=\d+/i);
print "yabb \n"
ako ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?yabbforum\.com\/?"[^>]*>YaBB/i ili
$data =~ /YaBB\.pl\?[^""]*num=\d+/i ) ;
print "dleforum \n"
ako ($data =~ /\(Powered by DLE Forum\)<\/title>/i ili
$data =~ /]+href="[^"]+(?:http:\/\/(?:www\.)?dle\-files\.ru|act=copyright)[^"]*">DLE Forum<\/a>/i) ;
print "iconboard \n"
ako ($data =~ /]+href="[^"]*http:\/\/(?:www\.)?ikonboard\.com\/?[^"]*"[^>]*>Ikonboard/i ili
$data =~ /\n"
ako ($data =~ /\n"
# if($data =~ /forums\.php\?fid=\d+/i ili
# $data =~ /topic\.php\?fid=\d+/i ili
ako ($data =~ /]+href="http:\/\/(?:www\.)?flashbb\.net\/?"[^>]*>FlashBB/i) ;
print "stokesit \n"
# if($data =~ /forum\.php\?f=\d+/i ili
ako ($data =~ /]+href="http:\/\/(?:www\.)?stokesit\.com\.au\/?"[^>]*>[^\/]*Stokes IT/i) ;
štampa "podijum \n"
# if($data =~ /topic\.php\?t=\d+/i ili
ako ($data =~ /]+href=[""]?http:\/\/(?:www\.)?sopebox\.com\/?[""]?[^>]*>Podium/i) ;
print "usebb \n"
# if($data =~ /forum\.php\?id=\d+/i ili
ako ($data =~ /]+href="http:\/\/(?:www\.)?usebb\.net\/?"[^>]*>UseBB/i) ;
print "wrforum \n"
# if($data =~ /index\.php\?fid=\d+/i ili
ako ($data =~ /]+href="http:\/\/(?:www\.)?wr\-script\.ru\/?"[^>]*>WR\-Forum/i) ;
print "yetanotherforumnet \n"
if ($data =~ /Još jedan forum\.net/i ili
$data =~ /default\.aspx\?g=posts&t=\d+/i) ;

Ovu i druge skripte navedene u postu možete pronaći u ovoj arhivi.

Skripta which-forum.pl ispituje kod html-stranice prisustvo potpisa mehanizma foruma u njemu. Koristili smo sličnu tehniku ​​kada smo definirali WordPress i Joomla, ali postoji nekoliko razlika. Prvo, sama skripta ne učitava kod stranice, već ga čita iz stdin-a ili datoteke proslijeđene kao argument. Ovo nam omogućava da jednom preuzmemo stranicu, na primjer, koristeći wget, a zatim je pokrenemo kroz nekoliko parsera, ako ih imamo više. Drugo, u ovoj skripti, prisustvo potpisa je 100% znak motora. Prošli put je prisustvo potpisa samo dalo težinu odgovarajućem motoru i „osvojilo“ motor sa najvećom težinom. Odlučio sam da bi u ovom slučaju takav pristup samo nepotrebno zakomplikovao kod.

Da bih testirao skriptu, malo sam istražio. Sastavio sam listu od nekoliko hiljada foruma i svaki od njih prošao kroz svoju skriptu, određujući na taj način procenat aktivacija programa i popularnost raznih mašina.

Da dobijem listu foruma, koristio sam svoj Google parser. pretraživačšaljite zahtjeve poput

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

i tako dalje. Pun kod generator upita naći ćete u datoteci gen-forumsearch-urls.pl. Osim .ru zone, korišteni su i .su .ua .kz i .by. Prošli put je bilo teško provesti ovakvu studiju, budući da WordPress i Joomla sajtovi nemaju takve potpise u URL-u. Katalozi poput cmsmagazine.ru/catalogue/ ne pružaju dovoljnu veličinu uzorka. Šta je 600 stranica na Drupalu?

Moram priznati da su me rezultati eksperimenta razočarali. Od 12.590 proučavanih lokacija, uspješno su identificirana samo 7.083 motora, odnosno samo u 56% slučajeva. Možda nisam uzeo u obzir neki motor? Da li je Bitrix stajao na pola foruma? Ili sam trebao potrošiti više vremena tražeći potpise? Općenito, ovdje je potrebno više istraživanja.

Među 56% uspješno identifikovanih mehanizama, IPB (31%), phpBB (26,6%) i vBulletin (26,5%) su, očekivano, bili najpopularniji.

Iza njih slijede SMF (5,8%) i DLEForum (5,3%). Moj omiljeni punBB bio je tek na 6. mjestu (1,64%). Ne bih savjetovao snažno vjerovati ovim brojkama (kažu da svaki treći forum u Runetu radi na IPB-u), ali određeni zaključci se, naravno, mogu izvući.

Na primjer, ako namjeravate napraviti stranicu na forumskom motoru i planirate modificirati forum, recimo platiti korisnicima 0,01$ za svaku poruku sa automatskim povlačenjem sredstava jednom sedmično, onda bi trebalo da odaberete jedan od tri najpopularnija motora . Što je forum popularniji, veća je vjerovatnoća da ćete naći programera koji je dobro upućen u njega.

Ako se ne očekuju značajne promjene u motoru, onda bi moglo imati smisla odabrati manje popularan motor, kao što je SMF ili punBB. Time ćete smanjiti broj hakerskih napada na vaš forum i količinu neželjene pošte koja se automatski šalje na njega.

Skripte za pretraživanje / definiranje foruma također mogu pronaći više od jedne praktična upotreba. Prvo što mi je lično palo na pamet je da sortiram identifikovane forume po TCI-ju i postavim postove sa linkovima na jednu od njihovih stranica u prvih sto. Međutim, stotinjak dofollow linkova na forumu ni na koji način nije uticalo na TIC (2 ažuriranja su prošla), pa je bolje da ne gubite vrijeme ovdje osim ako vas ne zanimaju tranzicije.

Jasno je da je imenovana upotreba skripti daleko od jedine. Mislim da možete lako shvatiti kako ih još možete koristiti.

Određeni moduli moraju komunicirati s hardverom kako bi ispunili svoje zadatke. Ovi moduli dolaze sa dodatnim drajverskim slojem. Svaki drajver tada treba fajl ploče da bi razgovarao sa stvarnim hardverom.
Datoteku ploče korisnik mora obezbijediti jer njena implementacija ne zavisi samo od korišćenog osnovnog sistema (HAL), već i od stvarne hardverske konfiguracije (ožičenje).

Predlošci

Svaki drajver daje predložak svoje datoteke ploče. Kopiranje ove datoteke u direktorij projekta i implementacija rutina je sve što treba učiniti. Imajte na umu da morate ukloniti dio _template iz naziva datoteke.

Podržane ploče

Neke ploče imaju unaprijed definirani hardver na sebi. Tamo gdje su zajednička ploča mi obezbjeđujemo makefile ( /boards/base/xxx/board.mk) koje možete uključiti u svoj makefile projekta. Ovo će onda automatski uključiti sve standardne hardverske drajvere i datoteke ploče. Dodatne unaprijed definirane datoteke ploče također se mogu naći u /boards/addons.


Datoteka index.php je ključna datoteka foruma i koristi se u skoro svim radnjama. Njegov rad se sastoji od sljedećih koraka:
1) Veza konfiguracijske datoteke database.php i iboard.php.
2) Uspostavljanje veze sa DBMS-om i dobijanje pristupa bazi podataka.
3) Čitanje informacija iz korisnički kolačići ili iz parametara proslijeđenih skripti, izdvajanjem informacija o ovom korisniku iz baze podataka i provjeravanjem njegove autentičnosti.
4) U slučaju neuspješne verifikacije (ili nedostatka informacija o korisniku), podaci za korisnički profil gosta se preuzimaju kao podaci korisnika ( matični broj - 1).
5) Povezivanje stilskih fajlova i jezika interfejsa, definisano od strane korisnika u postavkama vašeg profila.
6) Ako je parametar t prisutan u parametrima poziva skripte, tada se podaci o navedenoj temi i forumu preuzimaju iz baze podataka u kojoj ovu temu nalazi.
7) Ako je parametar f prisutan u parametrima poziva skripte, tada se podaci o forumu preuzimaju iz baze podataka.
8) Ako su prisutni parametri t ili f, vrši se provjera da li korisnik ima dovoljno prava da vidi odgovarajući forum.
9) Povezuje se modul naveden u parametru m. Ako je parametar m odsutan, tada se tip modula određuje ovisno o vrsti particije za koju se ovu akciju. Ako tip particije nije naveden, tada se vrši provjera kako bi se odredilo što bi trebalo biti prikazano početna stranica. U slučaju da je jedan od odjeljaka odabran kao glavna stranica, tada će se povezati modul odgovoran za prikaz odjeljka odgovarajućeg tipa, u suprotnom - modul main.php. Uključen je i stilski fajl koji ima isto ime kao dodatak, ali se nalazi u poddirektorijumu direktorijuma stilova koji odgovara stilu odabranom u postavkama korisničkog profila.
10) Parametar a je provjeren. Ako nije eksplicitno postavljen, deklarira se jednakim pogledu. Nadalje, ako je specificiran određeni odjeljak i parametar a je jednak prikazu, zamjenjuje se sa<имя_раздела>_view.
11) U zavisnosti od tražene akcije (navedena je u parametru poziva skripte a), povezuje se ili datoteka tmplate1.php (ako akcija ne sadrži prefiks do_) ili datoteka tmplate2.php (u suprotnom). Zatim se pozivaju sve akcije navedene u odgovarajućem predlošku, a umjesto akcije main_action, zapravo će biti pozvana akcija navedena u parametru a.
12) Dnevnik foruma sadrži informacije o izvršenoj radnji, identifikator i IP adresu korisnika koji je izvršio radnju.
Takođe u datoteci index.php postoji funkcija za rukovanje fatalnim greškama, koja je dizajnirana da prikaže poruku o grešci, kao i da popravi tekst greške u datoteci error.log.

Učitavanje...
Top