Artykuły na każdy temat

[PHP] Detekcja typu forum

Dodano 01.02.2016r. o 18:34
Są różne sposoby wykrywania tego na jakim skrypcie stoi dane forum dyskusyjne. Jedne rozwiązania są mniej efektywne, a drugie bardziej. Czasami wystarcza zwykłe sprawdzenie zawartości nagłówków lub tagów meta albo przejechanie odpowiednim wyrażeniem regularnym źródła strony. Sprawa komplikuje sie w momencie kiedy mamy setki tysięcy adresów do sprawdzenia. W przypadku botów spamujących fora dyskusyjne najczęściej odpytywane są odpowiednie adresy odpowiedzialne za rejestracje i w przypadku powodzenia proces jest kontynuowany. Są też takie przypadki, w których chodzi o znalezienie for dyskusyjnych bazujących na określonym skrypcie w celu chociażby eskalacji uprawnień lub wykorzystania exploita aby np. zrobić zrzut bazy danych celem sprzedaży. Bardzo dochodowy rynek swoją drogą. O ile w takich przypadkach Google jest bardzo pomocne to w przedstawionym przeze mnie zagadnieniu sprawa wygląda nieco inaczej. Ponadto o ile mnie pamięć nie myli metoda jest również odporna na sztuczki SEO z przyjaznymi adresami i siłą rzeczy jest niezależna od chociażby wykorzystywanego szablonu czy też ukrycia kluczowych informacji. Jej skuteczność oszacowałbym na 99,9%. Cały myk polega na tym, że odpytujemy serwer w poszukiwaniu specyficznego pliku, który występuję praktycznie tylko przy wykorzystaniu danego skryptu. Dodatkowo nie spotkałem się jeszcze z sytuacją, w której wszystkie pliki oprócz przysłowiowego index.php odpowiedzialnego za routing adresów były umieszczone w niedostępnej lokalizacji czyli tzw. katalog wyżej niedostępnego z poziomu przeglądarki. Jedyny problem jaki może wystąpić to webmaster, który umyślnie wrzucił plik o takiej samej nazwie jaką poszukujemy. Pomimo tego, że jest nikła na to szansa jednak warto o tym wspomnieć.
Kod:
<?php
$target 'http://www.forumweb.pl/';
// Reszta deklaracji dla IPB, vBulletin, SMF, bbPress, MyBB, PunBB, FluxBB, Vanilla, Phorum, UseBB, XMB, IceBB, SEO-Board i tym podobnych
$forum_types[] = ['phpbb_by_przemo''post_history.php'];
$forum_types[] = ['phpbb3''ucp.php'];
$forum_types[] = ['phpbb2''groupcp.php'];

echo '<pre>'.$target.' -> ';

for($h 0$how count($forum_types); $h $how; ++$h)
{
 $ch curl_init($target.$forum_types[$h][1]);
 curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
 curl_exec($ch);


 // HTTP/1.1 200 OK?
 if(curl_getinfo($chCURLINFO_HTTP_CODE) === 200)
 {
  $forum_type $forum_types[$h][0];
  break;
 }

 curl_close($ch);
}

echo ($forum_type !== null $forum_type 'unknown type').'</pre>';
?>
Oczywiście to tylko prototyp przedstawiający ideę. Należy go uzupełnić o konfigurację cURL'a, obsługę wyjątków, timeoutów, logowanie informacji jak i inne bzdury pokroju wrzucenie tego w jakiś wrapper albo metodę w klasie. Ulepszoną wersję wykorzystuję między innymi w pewnym projekcie zwanym dalej Beithir, o którym wspomniałem szerzej chociażby tutaj.

Komentarze

Brak komentarzy

Dodaj komentarz

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)