Podaci s indeksne php ploče. Automatsko otkrivanje motora foruma

05.03.2020 Vijesti

Počnimo odmah s glavnim kodom skripte:

#!/usr/bin/perl

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

koristiti strog;

# komentirana retka - za strogost
# ako je zadatak prikupljanje statistike motora, ostavite ga kako jest
# ako napravite popis foruma - odkomentirajte

moji $podaci ;
$podaci .= $_while (<> ) ;

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

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

Ovu i druge skripte spomenute u postu pronaći ćete u ovoj arhivi.

Skripta koji-forum.pl ispituje kod HTML stranice da vidi sadrži li potpise mehanizma foruma. 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. To vam omogućuje da stranicu preuzmete jednom, na primjer, pomoću wget-a, a zatim je prođete kroz nekoliko analizatora, ako ih imamo više od jednog. Drugo, u ovoj skripti prisutnost potpisa je 100% znak motora. Zadnji put je prisutnost potpisa samo dodala težinu odgovarajućem motoru i motor s najvećom težinom je "pobijedio". Zaključio sam da bi u ovom slučaju takav pristup samo nepotrebno zakomplicirao kod.

Kako bih testirao scenarij, malo sam istraživao. Sastavio sam popis od nekoliko tisuća foruma i svaki od njih proveo kroz svoju skriptu, određujući tako postotak odgovora programa i popularnost različitih motora.

Da bih dobio popis foruma, upotrijebio sam svoj Google parser. Pretraživač zahtjevi poput

web mjesto:forum.*.ru
web mjesto:razgovor.*.ru
web mjesto:board.*.ru
web mjesto:smf.*.ru
web mjesto:phpbb.*.ru
....

i tako dalje. U datoteci ćete pronaći potpuni kod generatora upita gen-forumsearch-urls.pl. Uz zone.ru korišteni su i .su .ua .kz i .by. Prošli put je bilo teško provesti takvo istraživanje, jer WordPress i Joomla stranice nemaju takve potpise u URL-u. Katalozi poput cmsmagazine.ru/catalogue/ ne pružaju dovoljnu veličinu uzorka. Što je 600 Drupal stranica?

Moram priznati da su me rezultati eksperimenta razočarali. Od 12.590 proučavanih mjesta, motor je uspješno identificiran na samo 7.083, odnosno samo u 56% slučajeva. Možda nisam uzeo u obzir neki motor? Je li stvarno istina da pola foruma ima instaliran Bitrix? Ili sam trebao potrošiti više vremena tražeći potpise? Općenito, ovdje su potrebna dodatna istraživanja.

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

Slijede ih s velikim zaostatkom SMF (5,8%) i DLEForum (5,3%). Moj omiljeni punBB bio je tek na 6. mjestu (1,64%). Ne bih preporučio da se puno vjeruje ovim brojkama (kažu da svaki treći forum na 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 uz automatsko povlačenje sredstava jednom tjedno, tada biste trebali odabrati jedan od tri najpopularnija motora. Što je forum popularniji, veće su šanse da ćete pronaći programera koji ga dobro poznaje.

Ako se ne očekuju značajne promjene u motoru, možda ima smisla odabrati manje popularan motor, na primjer SMF ili punBB. To će smanjiti broj hakerski napadi na vaš forum i količinu neželjene pošte koja se na njemu automatski šalje.

Skripte za pretraživanje/prepoznavanje foruma također mogu pronaći mnoge praktične primjene. Prvo što mi je palo na pamet bilo je razvrstati identificirane forume po TIC-u i objaviti na prvih sto postova s ​​poveznicama na neku od mojih stranica. Međutim, stotine dofollow linkova na forumu nisu ni na koji način utjecale na TCI (prošla su 2 ažuriranja), pa je bolje ne gubiti vrijeme ovdje, osim ako niste zainteresirani za prijelaze.

Jasno je da navedena uporaba skripti nije jedina. Mislim da lako možete shvatiti kako ih još možete koristiti.

Određeni moduli moraju komunicirati s hardverom kako bi izvršili svoje zadatke. Ti moduli dolaze s dodatnim slojem upravljačkog programa. Svaki upravljački program zatim treba datoteku ploče za komunikaciju sa stvarnim hardverom.
Datoteku ploče treba osigurati korisnik jer njezina implementacija ne ovisi samo o korištenom osnovnom sustavu (HAL), već i o stvarnoj konfiguraciji hardvera (ožičenje).

Predlošci

Svaki upravljački program daje predložak svoje datoteke ploče. Sve što trebate učiniti je kopiranje ove datoteke u direktorij vašeg projekta i implementacija rutina. Imajte na umu da morate ukloniti dio _template iz naziva datoteke.

Podržane ploče

Neke ploče imaju unaprijed definirani hardver na sebi. Gdje su uobičajena ploča, nudimo makefile ( /boards/base/xxx/board.mk) koje možete uključiti u vlastitu make datoteku projekta. To će automatski uključiti sve standardne hardverske upravljačke programe i datoteke ploče. Dodatne unaprijed definirane datoteke ploče također se mogu pronaći u /ploče/dodaci.


Datoteka index.php ključna je datoteka foruma i koristi se za gotovo sve akcije. Njegov rad sastoji se od sljedećih faza:
1) Povezivanje konfiguracijske datoteke baza podataka.php i iboard.php.
2) Uspostavljanje veze sa DBMS-om i dobivanje pristupa bazi podataka.
3) Čitanje informacija iz korisničkih kolačića ili iz parametara proslijeđenih skripti, izdvajanje informacija o tom korisniku iz baze podataka i provjera njegove autentičnosti.
4) Ako je provjera neuspješna (ili nema podataka o korisniku), podaci za korisnički profil Gost (registracijski broj - 1) se dohvaćaju kao korisnički podaci.
5) Povezuju se stil sučelja i jezične datoteke koje je korisnik definirao u postavkama svog profila.
6) Ako je parametar t prisutan u parametrima poziva skripte, tada se podaci o navedenoj temi i forumu u kojem se ta tema nalazi izdvajaju iz baze podataka.
7) Ako je parametar f prisutan u parametrima poziva skripte, tada se podaci o forumu izdvajaju iz baze podataka.
8) Ako su parametri t ili f prisutni, provjerit će se ima li korisnik dovoljna prava za pregled odgovarajućeg foruma.
9) Spojen je modul naveden u parametru m. Ako nedostaje parametar m, onda se tip modula određuje ovisno o vrsti particije za koju ovu radnju. Ako tip odjeljka nije naveden, provjerava se što bi trebalo biti prikazano početna stranica. Ako je jedan od odjeljaka odabran kao glavna stranica, tada će se spojiti modul odgovoran za prikaz odjeljka odgovarajućeg tipa, u protivnom će se spojiti modul main.php. Također je uključena datoteka stila koja ima isti naziv kao i dodatak, ali se nalazi u poddirektoriju direktorija stilova koji odgovara stilu odabranom u postavkama korisničkog profila.
10) Parametar a se provjerava. Ako nije eksplicitno specificirano, deklarirano je jednako pogledu. Dalje, ako je naveden određeni odjeljak, a parametar a je pogled, zamjenjuje se s<имя_раздела>_pogled.
11) Ovisno o traženoj akciji (navedeno 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 radnje navedene u odgovarajućem predlošku, a umjesto radnje main_action zapravo će se pozvati radnja navedena u parametru a.
12) Dnevnik foruma sadrži podatke o izvršenoj akciji, identifikator i IP adresu korisnika koji je izvršio radnju.
U datoteci index.php također postoji funkcija za rukovanje kobne greške, koji je dizajniran za prikaz poruke o pogrešci, kao i za snimanje teksta pogreške u datoteku error.log.