Date de pe placa index php. Detectarea automată a motorului forumului

05.03.2020 Știri

Să începem imediat cu codul de script principal:

#!/usr/bin/perl

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

folosiți strict;

# rânduri comentate - pentru rigoare
# 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ât de mult a fost Powered by phpBB fără un link în 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 „ikonboard \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) ;

Veți găsi acest lucru și alte scripturi menționate în postarea din această arhivă.

Scenariul care-forum.pl examinează codul paginii HTML pentru a vedea dacă conține semnături ale motorului de forum. 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 vă permite să descărcați pagina o dată, de exemplu, folosind wget, și apoi să o rulați prin mai multe analizoare, dacă avem mai multe. În al doilea rând, în acest script prezența unei semnături este 100% un semn al motorului. Ultima dată, prezența unei semnături doar a adăugat greutate motorului corespunzător și motorului cu cea mai mare greutate „câștigat”. 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 câteva cercetări. Am compilat o listă de câteva mii de forumuri și am trecut pe fiecare dintre ele prin scriptul meu, determinând astfel procentul de răspunsuri la program și popularitatea diferitelor motoare.

Pentru a obține lista de forumuri, am folosit analizatorul meu Google. Motor de căutare cereri ca

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

și așa mai departe. Veți găsi codul complet al generatorului de interogări în fișier gen-forumsearch-urls.pl. Pe lângă zone.ru, au mai fost folosite și .su .ua .kz și .by. Data trecută, a fost dificil să se realizeze un astfel de studiu, 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 Drupal?

Trebuie să recunosc, rezultatele experimentului m-au dezamăgit. Din cele 12.590 de site-uri studiate, motorul a fost identificat cu succes pe doar 7.083, adică doar în 56% din cazuri. Poate nu am luat in calcul vreun motor? Era chiar adevărat că jumătate din forumuri aveau instalat Bitrix? Sau ar fi trebuit să petrec mai mult timp căutând semnături? În general, aici sunt necesare cercetări suplimentare.

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

Ele sunt urmate cu un decalaj mare de SMF (5,8%) și DLEForum (5,3%). PunBB-ul meu preferat a fost doar pe locul 6 (1,64%). Nu aș recomanda să puneți prea multă încredere în aceste numere (se spune că fiecare al treilea forum de pe RuNet rulează pe IPB), dar, desigur, se pot trage 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 sunt mai mari șansele de a găsi 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, de exemplu SMF sau punBB. Acest lucru va reduce numărul atacurile hackerilor către forumul dvs. și cantitatea de spam trimisă automat pe acesta.

Scripturile pentru căutarea/identificarea forumurilor pot găsi, de asemenea, multe aplicații practice. Primul lucru care mi-a venit în minte a fost să sortez forumurile identificate după TIC și să postez pe primele sute de postări cu link-uri către unul dintre site-urile mele. Cu toate acestea, sute 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ă nu sunteți interesat de tranziții.

Este clar că utilizarea menționată 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 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 suportate

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 fișier makefile al proiectului. 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 pentru aproape toate acțiunile. Activitatea sa constă din următoarele etape:
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 din cookie-urile utilizatorului sau din parametrii trecuți în script, extragerea informațiilor despre acest utilizator din baza de date și verificarea autenticității acestuia.
4) Dacă verificarea nu reușește (sau nu există informații despre utilizator), datele pentru profilul de utilizator Guest (număr de înregistrare - 1) sunt preluate ca date de utilizator.
5) Stilul interfeței și fișierele de limbă definite de utilizator în setările profilului său sunt conectate.
6) Dacă parametrul t este prezent în parametrii apelului de script, atunci datele despre subiectul specificat și forumul în care se află acest subiect sunt extrase din baza de date.
7) Dacă parametrul f este prezent în parametrii apelului de script, atunci datele despre forum sunt extrase din baza de date.
8) Dacă sunt prezenți parametrii t sau f, se va verifica dacă utilizatorul are drepturi suficiente pentru a vizualiza forumul corespunzător.
9) Modulul specificat la parametrul m este conectat. Dacă parametrul m lipsește, atunci tipul modulului este determinat în funcție de tipul de partiție pentru care această acțiune. Dacă tipul de secțiune nu este specificat, atunci se face o verificare pentru a vedea cum ar trebui să fie afișat pagina principala. Dacă 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 va fi conectat. 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 specificat în mod explicit, este declarat egal cu vizualizare. Apoi, dacă este specificată o anumită secțiune și parametrul a este vizualizat, acesta este înlocuit cu<имя_раздела>_vedere.
11) În funcție de acțiunea solicitată (este indicată în parametrul de apel script a), fie fișierul tmplate1.php este conectat (dacă acțiunea nu conține prefixul do_), fie fișierul tmplate2.php (în caz contrar). În continuare, sunt apelate toate acțiunile enumerate în șablonul corespunzător ș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.
Există, de asemenea, o funcție în fișierul index.php de gestionat erori fatale, care este conceput pentru a afișa un mesaj de eroare, precum și pentru a înregistra textul de eroare în fișierul error.log.