Detectarea automată a motorului forumului. Detectarea automată a motorului forumului Fișier index php board

Să începem imediat cu codul de script principal:

#!/usr/bin/perl

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

folosiți strict;

# rânduri comentate - pentru strictețe
# dacă sarcina este de a colecta statistici ale motorului, lăsați-o așa cum este
# dacă faci o listă de forumuri - decomentează

my $data ;
$date .= $_ while (<> ) ;

# verificați câte au fost Powered by phpBB fără link de subsol
tipăriți „phpbb \n"
dacă ($date =~ /]+href="[^"]*http:\/\/(?:www\.)?phpbb\.com\/?"[^>]*>phpBB/i sau
# $date =~ /viewforum\.php\?[^""]*f=\d+/i sau
$date =~ /phpBB\-SEO/i sau
$date =~ /) ;
tipăriți „ipb \n"
dacă ($date =~ /]+href="[^"]*http:\/\/(?:www\.)?invision(?:board|power)\.com\/?[^"]*"[^>]*> [^<]*IP\.Board/i sau
$date =~ /]+href="[^"]*http:\/\/(?:www\.)?invisionboard\.com\/?"[^>]*>Invision Power Board/i sau
$date =~ /

/i sau
$date =~ /index\.php\?[^""]*showforum=\d+/i) ;
tipăriți „vbuletin \n"
dacă ($date =~ /Produs de:?[^<]+vBulletin[^<]+(?:Version)?/i sau
$date =~ /) ;
tipăriți „smf \n"
dacă ($date =~ /]+href="[^"]*http:\/\/(?:www\.)?simplemachines\.org\/?"[^>]*>Alimentat de SMF/i sau
$date =~ /index\.php\?[^""]*board=\d+\.0/i) ;
tipăriți „punbb \n"
dacă ($date =~ /]+href="[^"]*http:\/\/(?:(?:www\.)?punbb\.org|punbb\.informer\.com)\/?"[^>]*> PunBB/i); #sau
# $date =~ /viewforum\.php\?[^""]*id=\d+/i);
tipăriți „fluxbb \n"
# if($data =~ /viewtopic\.php\?id=\d+/i sau
dacă ( $date =~ /]+href="http:\/\/(?:www\.)fluxbb\.org\/?"[^>]*>FluxBB/i) ;
tipăriți „exbb \n"
dacă ($date =~ /]+href="[^"]*http:\/\/(?:www\.)?exbb\.org\/?"[^>]*>ExBB/i); # sau
# $date =~ /forums\.php\?[^""]*forum=\d+/i);
tipăriți „yabb \n"
dacă ($date =~ /]+href="[^"]*http:\/\/(?:www\.)?yabbforum\.com\/?"[^>]*>YaBB/i sau
$date =~ /YaBB\.pl\?[^""]*num=\d+/i ) ;
tipăriți „dleforum \n"
dacă ($date =~ /\(Alimentat de Forumul DLE\)<\/title>/i sau
$date =~ /]+href="[^"]+(?:http:\/\/(?:www\.)?dle\-files\.ru|act=copyright)[^"]*">Forumul DLE<\/a>/i) ;
imprimați „pictogramă \n"
dacă ($date =~ /]+href="[^"]*http:\/\/(?:www\.)?ikonboard\.com\/?[^"]*"[^>]*>Ikonboard/i sau
$date =~ /
dacă ($date =~ /
# if($data =~ /forums\.php\?fid=\d+/i sau
# $date =~ /topic\.php\?fid=\d+/i sau
dacă ($date =~ /]+href="http:\/\/(?:www\.)?flashbb\.net\/?"[^>]*>FlashBB/i) ;
tipăriți „stokesit \n"
# if($date =~ /forum\.php\?f=\d+/i sau
dacă ($date =~ /]+href="http:\/\/(?:www\.)?stokesit\.com\.au\/?"[^>]*>[^\/]*Stokes IT/i) ;
imprimă „podium \n"
# if($date =~ /topic\.php\?t=\d+/i sau
dacă ($date =~ /]+href=[""]?http:\/\/(?:www\.)?sopebox\.com\/?[""]?[^>]*>Podium/i) ;
tipăriți „usebb \n"
# if($date =~ /forum\.php\?id=\d+/i sau
dacă ($date =~ /]+href="http:\/\/(?:www\.)?usebb\.net\/?"[^>]*>UseBB/i) ;
tipăriți „wrforum \n"
# if($data =~ /index\.php\?fid=\d+/i sau
dacă ($date =~ /]+href="http:\/\/(?:www\.)?wr\-script\.ru\/?"[^>]*>WR\-Forum/i) ;
tipăriți „yetanotherforumnet \n"
if ($date =~ /Yet Another Forum\.net/i sau
$date =~ /default\.aspx\?g=posts&t=\d+/i) ;

Acesta și alte scripturi menționate în postare pot fi găsite în această arhivă.

Scenariul care-forum.pl examinează codul paginii html pentru prezența semnăturilor motorului de forum în el. Am folosit o tehnică similară atunci când definim WordPress și Joomla, dar există câteva diferențe. În primul rând, scriptul în sine nu încarcă codul paginii, ci îl citește din stdin sau dintr-un fișier transmis ca argument. Acest lucru ne permite să descărcam pagina o dată, de exemplu, folosind wget, și apoi să o rulăm prin mai multe analizoare, dacă avem mai multe. În al doilea rând, în acest script, prezența unei semnături este un semn 100% al motorului. Ultima dată, prezența semnăturii a dat doar greutate motorului corespunzător și a „câștigat” motorul cu cea mai mare greutate. Am decis că, în acest caz, o astfel de abordare nu ar face decât să complice inutil codul.

Pentru a testa scenariul, am făcut o mică cercetare. Am compilat o listă de câteva mii de forumuri și am rulat fiecare dintre ele prin scriptul meu, determinând astfel procentul de activări ale programului și popularitatea diferitelor motoare.

Pentru a obține lista de forumuri, am folosit analizatorul meu Google. motor de căutare trimite cereri like

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

si asa mai departe. Cod complet generator de interogări pe care îl veți găsi în fișier gen-forumsearch-urls.pl. Pe lângă zona .ru, s-au folosit și .su .ua .kz și .by. A fost dificil să desfășurăm un astfel de studiu data trecută, deoarece site-urile WordPress și Joomla nu au astfel de semnături în URL. Cataloage precum cmsmagazine.ru/catalogue/ nu oferă o dimensiune suficientă a eșantionului. Ce înseamnă 600 de site-uri pe Drupal?

Trebuie să recunosc că rezultatele experimentului m-au dezamăgit. Din cele 12.590 de site-uri studiate, doar 7.083 de motoare au fost identificate cu succes, adică doar în 56% din cazuri. Poate nu am luat in calcul vreun motor? Bitrix a stat pe jumătate din forumuri? Sau ar fi trebuit să petrec mai mult timp căutând semnături? În general, aici este nevoie de mai multe cercetări.

Dintre cele 56% dintre motoarele identificate cu succes, IPB (31%), phpBB (26,6%) și vBulletin (26,5%) au fost cele mai populare, așa cum era de așteptat.

Sunt urmați îndeaproape de SMF (5,8%) și DLEForum (5,3%). PunBB-ul meu preferat a fost doar pe locul 6 (1,64%). Nu aș sfătui să ai încredere în aceste cifre (se spune că fiecare al treilea forum din Runet funcționează pe IPB), dar se pot trage, desigur, anumite concluzii.

De exemplu, dacă intenționați să faceți un site pe un motor de forum și intenționați să modificați forumul, de exemplu, să plătiți utilizatorilor 0,01 USD pentru fiecare mesaj cu retragerea automată a fondurilor o dată pe săptămână, atunci ar trebui să alegeți unul dintre cele mai populare trei motoare . Cu cât forumul este mai popular, cu atât este mai probabil să găsești un programator care este bine versat în el.

Dacă nu sunt de așteptat modificări semnificative la motor, atunci ar putea avea sens să alegeți un motor mai puțin popular, cum ar fi SMF sau punBB. Făcând acest lucru, veți reduce numărul de atacuri de hackeri pe forumul dvs. și cantitatea de spam trimisă automat către acesta.

Scripturile pentru căutarea/definirea forumurilor pot găsi, de asemenea, mai multe uz practic. Primul lucru care mi-a venit personal în minte a fost să sortez forumurile identificate după TCI și să plasez postări cu link-uri către unul dintre site-urile lor în prima sută. Cu toate acestea, o sută de link-uri dofollow pe forum nu au afectat în niciun fel TCI (au trecut 2 actualizări), așa că este mai bine să nu pierdeți timpul aici decât dacă sunteți interesat de tranziții.

Este clar că utilizarea numită a scripturilor este departe de a fi singura. Cred că îți poți da seama cu ușurință cum altfel le poți folosi.

Anumite module trebuie să comunice cu hardware-ul pentru a-și îndeplini sarcinile. Aceste module vin cu un strat suplimentar de driver. Fiecare driver are apoi nevoie de un fișier de placă pentru a vorbi cu hardware-ul real.
Fișierul plăcii trebuie furnizat de utilizator, deoarece implementarea sa depinde nu numai de sistemul de bază utilizat (HAL), ci și de configurația hardware reală (cablare).

Șabloane

Fiecare driver oferă un șablon al fișierului său de bord. Copierea acestui fișier în directorul proiectului și implementarea rutinelor este tot ce trebuie să faceți. Rețineți că trebuie să eliminați partea _template din numele fișierului.

Placi acceptate

Unele plăci au hardware predefinit pe ele. Acolo unde sunt o placă comună, oferim un makefile ( /boards/base/xxx/board.mk) pe care le puteți include în propriul dvs. fișier makefile de proiect. Aceasta va include apoi automat toate driverele hardware standard și fișierele de placă. Fișierele de bord predefinite suplimentare pot fi găsite și în /boards/addons.


Fișierul index.php este fișierul cheie al forumului și este folosit în aproape toate acțiunile. Lucrarea sa constă din următorii pași:
1) Conexiune fișierele de configurare database.php și iboard.php.
2) Stabilirea unei conexiuni la SGBD și obținerea accesului la baza de date.
3) Citirea informațiilor de la cookie-uri utilizator sau din parametrii trecuți scriptului, extragând informații despre acest utilizator din baza de date și verificându-i autenticitatea.
4) În cazul verificării nereușite (sau a lipsei de informații despre utilizator), datele pentru profilul utilizatorului Guest sunt preluate ca date de utilizator ( număr de înregistrare - 1).
5) Conectarea fișierelor de stil și a limbajului interfeței, definit de utilizatorîn setările profilului dvs.
6) Dacă parametrul t este prezent în parametrii apelului de script, atunci datele despre subiectul și forumul specificate sunt preluate din baza de date, în care Acest subiect situat.
7) Dacă parametrul f este prezent în parametrii apelului de script, atunci datele despre forum sunt preluate din baza de date.
8)Dacă sunt prezenți parametrii t sau f, se face o verificare pentru a vedea dacă utilizatorul are drepturi suficiente pentru a vizualiza forumul corespunzător.
9) Modulul specificat în parametrul m este conectat. Dacă parametrul m este absent, atunci tipul modulului este determinat în funcție de tipul de partiție pentru care această acțiune. Dacă nu este specificat tipul de partiție, se face o verificare pentru a determina cum ar trebui să fie afișat pagina principala. În cazul în care una dintre secțiuni este selectată ca pagină principală, atunci modulul responsabil cu afișarea secțiunii de tipul corespunzător va fi conectat, în caz contrar - modulul main.php. Este inclus și un fișier de stil, care are același nume ca și plug-in-ul, dar se află într-un subdirector al directorului de stiluri corespunzător stilului selectat în setările profilului utilizatorului.
10) Parametrul a este verificat. Dacă nu este setat în mod explicit, este declarat egal cu vizualizare. În plus, dacă este specificată o anumită secțiune și parametrul a este egal cu vizualizarea, acesta este înlocuit cu<имя_раздела>_vedere.
11) În funcție de acțiunea solicitată (este specificat în parametrul de apel script a), fie fișierul tmplate1.php (dacă acțiunea nu conține prefixul do_), fie fișierul tmplate2.php (în caz contrar). Apoi, toate acțiunile listate în șablonul corespunzător sunt apelate și, în loc de acțiunea main_action, acțiunea specificată în parametrul a va fi de fapt apelată.
12) Jurnalul forumului conține informații despre acțiunea efectuată, identificatorul și adresa IP a utilizatorului care a efectuat acțiunea.
De asemenea, în fișierul index.php există o funcție pentru gestionarea erorilor fatale, care este concepută pentru a afișa un mesaj de eroare, precum și pentru a remedia textul de eroare din fișierul error.log.

Se încarcă...
Top