Filip Lynx Adamczyk

Filip Lynx Adamczyk Programista
PHP/Javascript

Temat: pozbycie się spam-botów phpBB

Zakładam, że chodzi o phpBB2. Ja swego czasu miałem ten sam problem i rozwiązałem go następująco:
Zmodyfikowałem potwierdzenie graficzne tak, że zamiast odczytywać treść obrazka należało podać wynik prostej operacji na 2 cyfrach(dodawanie lub mnożenie). Proste i rozwiązało problem. A teraz kod:
Plik ./includes/usercp_register.php:
Znajdź(~297 linii):
$sql = 'SELECT code
FROM ' . CONFIRM_TABLE . "
WHERE confirm_id = '$confirm_id'
AND session_id = '" . $userdata['session_id'] . "'";

Zastąp przez:
$sql = 'SELECT code, equal
FROM ' . CONFIRM_TABLE . "
WHERE confirm_id = '$confirm_id'
AND session_id = '" . $userdata['session_id'] . "'";
---
Znajdź(~1002 linii):
$code = dss_rand();
$code = substr(str_replace('0', 'Z', strtoupper(base_convert($code, 16, 35))), 2, 6);

$confirm_id = md5(uniqid($user_ip));

$sql = 'INSERT INTO ' . CONFIRM_TABLE . " (confirm_id, session_id, code)
VALUES ('$confirm_id', '". $userdata['session_id'] . "', '$code')";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not insert new confirm code information', '', __LINE__, __FILE__, $sql);
}
Zastąp przez:
$chars = array('1','2','3','4','5','6','7','8','9');
$count = count($chars) - 1;
$number_1 = $chars[rand(0, $count)];
$number_2 = $chars[rand(0, $count)];
$choose = rand(0,1);
switch($choose){
case 0:{
$code = $number_1.'+'.$number_2.'=';
$equal = $number_1 + $number_2;
break;
}
case 1:{
$code = $number_1.'*'.$number_2.'=';
$equal = $number_1 * $number_2;
break;
}
}
$confirm_id = md5(uniqid($user_ip));

$sql = "INSERT INTO " . CONFIRM_TABLE . " (confirm_id, session_id, code, equal)
VALUES ('$confirm_id', '". $userdata['session_id'] . "', '$code', '$equal')";
if (!$db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Could not insert new confirm code information', '', __LINE__, __FILE__, $sql);
}
unset($equal);
Zapisz zmiany i zamknij plik

Plik ./includes/usercp_confirm.php:
Znajdź(~73 linii):
$total_width = 320;
$total_height = 50;
$img_height = 40;

Zastąp przez:
$total_width = 160;
$total_height = 50;
$img_height = 90;
---
Znajdź(~405 linii):
'Z' => array(
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////////8A//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////wD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAQ//////////////8A/////////////////////////1AAAAAAAAAABLz//////////////wD///////////////////////98AAAAAAAAAACY////////////////AP//////////////////////pAAAAAAAAAAAaP////////////////8A/////////////////////8QIAAAAAAAAAET8/////////////////wD////////////////////gGAAAAAAAAAAo9P//////////////////AP//////////////////9CwAAAAAAAAAFNz///////////////////8A//////////////////xMAAAAAAAAAATA/////////////////////wD/////////////////eAAAAAAAAAAAnP//////////////////////AP///////////////5wAAAAAAAAAAHT///////////////////////8A///////////////ABAAAAAAAAABM/P///////////////////////wD/////////////3BQAAAAAAAAALPT/////////////////////////AP////////////QoAAAAAAAAABjg//////////////////////////8A///////////8SAAAAAAAAAAExP///////////////////////////wD//////////2wAAAAAAAAAAKD/////////////////////////////AP////////+YAAAAAAAAAAB8//////////////////////////////8A/////////wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////wD/////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////AP////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=',
'width' => 40
),

Dodaj za tym dodaj:
'+' => array(
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD///////////////////////AAAAAAAAA/////////////////////AP///////////////////////AAAAAAAAA////////////////////8A///////////////////////AAAAAAAAA/////////////////////wD///////////////////////AAAAAAAAA/////////////////////AP///////////////////////AAAAAAAAA////////////////////8A///////////////////////AAAAAAAAA/////////////////////wD//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA///////////8A//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////wD//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA///////////8A//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////wD//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA///////////8A//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////wD///////////////////////AAAAAAAAA/////////////////////AP///////////////////////AAAAAAAAA////////////////////8A///////////////////////AAAAAAAAA/////////////////////wD/////////////////////////AAAAAAAAAP//////////////////AP////////////////////////8AAAAAAAAA//////////////////8A/////////////////////////wAAAAAAAAD//////////////////wD///////////////////////AAAAAAAAA/////////////////////AP///////////////////////AAAAAAAAA////////////////////8A///////////////////////AAAAAAAAA/////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=',
'width' => 40
),
'=' => array(
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA///////////8A//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////wD//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA///////////8A//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA///////////8A//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////wD//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////AP//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA///////////8A//////////////AAAAAAAAAAAAAAAAAAAAAAAAAAA////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=',
'width' => 40
),
'*' => array(
'data' => 'AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD////////////////////////AAAAAAAA/////////////////////AP////////////////////////AAAAAAA/////////////////////8A////////////////////////AAAAAAAA/////////////////////wD////////////////////////AAAAAAAA/////////////////////AP////////////////////////AAAAAAA/////////////////////8A////////////////////////AAAAAAAA/////////////////////wD////////////////////////AAAAAAAA/////////////////////AP////////////////////////AAAAAAA/////////////////////8A////////////////////////AAAAAAAA/////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8A/////////////////////////////////////////////////////wD/////////////////////////////////////////////////////AP////////////////////////////////////////////////////8=',
'width' => 40
),
Zapisz zmiany i zamknij plik.

Plik: ./language/lang_polish/lang_main.php
Znajdź(~671 linii):
$lang['Confirm_code'] = 'Kod potwierdzający';
$lang['Confirm_code_explain'] = 'Wprowadź kod dokładnie tak jak powyżej. Uwaga: Cyfrę zero rozpoznajemy po przekreśleniu.';

I zastąp przez:
$lang['Confirm_code'] = 'Potwierdzenie';
$lang['Confirm_code_explain'] = 'Wprowadź wynik działania:';

Zapisz zmiany i zamknij plik.

Baza danych musisz zmienić tabelę, gdzie przechowywany jest kod. W tym celu wykonaj zapytanie do sql:
ALTER TABLE `phpbb_confirm` ADD `equal` TINYINT( 1 ) NOT NULL AFTER `code` ;

Teraz powinieneś już móc się cieszyć nowym potwierdzeniem graficznym. W razie jakichś problemów napisz, to Ci pomogę.

Pozdrawiam.Filip Adamczyk edytował(a) ten post dnia 24.09.07 o godzinie 14:51
Marek Karcz

Marek Karcz Google, IBM,
Akademia
Górniczo-Hutnicza
im. Stanisława St...

Temat: pozbycie się spam-botów phpBB

Jerzy B.:
Mam włączoną weryfikację użytkownika, akceptację przez administratora...

To niech administrator sprawdza, jakie konta aktywuje. Wystarczy rzut oka na adres mailowy, lub - jak to w phpbb bywa - na wypełnione zainteresowania, stronę www i miejsce zamieszkania. I już łatwo stwierdzić czy to spambot czy nie.

konto usunięte

Temat: pozbycie się spam-botów phpBB

Fajnie, robiłeś to przy 10 botach dziennie? Tylko tylu dzięki wielkiej ilości filtrów...
Paweł Wrzosek

Paweł Wrzosek iOS Developer

Temat: pozbycie się spam-botów phpBB

Zmienić adres, wyindexować z przeglądarek. Wtedy xrumera (on Cię dręczy) forum nie będzie obchodzić. Minusy tego rozwiązania są chyba az nazbyt oczywiste :)

A tak serio - naprawdę trzeba tu kodera - i to niekoniecznie jakiegoś wyjątkowo zdolnego. wystarczy absolutnie NAJPROSTSZY, ale niestandardowy algorytm i myślę, że może on zapobiec typowemu automatycznemu spamowi na 95%.Paweł Wrzosek edytował(a) ten post dnia 29.09.07 o godzinie 23:47
Jarosław Czub

Jarosław Czub FullStack Developer

Temat: pozbycie się spam-botów phpBB

Powiedzmy tak: tokeny graficzne - niby fajne, ale proste tokeny jest się w stanie prosto i bezboleśnie ocr'em przejechać, a takie pozawijane to czasami ciężko odczytać. Całkowicie się zgadzam z http://pornel.net/captcha.

Tokeny typu 2+2=4 czy ile wynosi, zawsze można to robota nauczyć a pozatym takie rzeczy wkurzają użytkowników strony.

Też mnie w moich serwisach męczyły spamboty takie co dopisują się wszędzie gdzie się da z via..., itd. najlepsze rozwiązanie co wymyśliłem to oparte na css i js, dlaczego bo boty jeszcze nie obsługują JS i długo nie będą obsługiwać.

konto usunięte

Temat: pozbycie się spam-botów phpBB

Widziałem coś takiego w SMF forum:
Odsłuchaj kod ( tutaj plik dźwiękowy ) ;)
Nie wiem na ile to jest skuteczne ale sam pomysł mi się spodobał co o tym sądzicie ?

konto usunięte

Temat: pozbycie się spam-botów phpBB

A czy to nie była wyłącznie alternatywa CAPTCHA dla niewidomych?

konto usunięte

Temat: pozbycie się spam-botów phpBB

Po części tak, ale wg mnie pomysł ciekawy nie wiem jak wygląda analiza głosu przez spam boty... chyba nie jest to takie proste.

konto usunięte

Temat: pozbycie się spam-botów phpBB

Michał W.:
Po części tak, ale wg mnie pomysł ciekawy nie wiem jak wygląda
analiza głosu przez spam boty... chyba nie jest to takie proste.

Problem polega na tym, że w dalszym ciągu jest to przerzucanie obrony przed spamem na usera - a moim zdaniem, zabezpieczeniem powinni zajmować się admini serwera...

konto usunięte

Temat: pozbycie się spam-botów phpBB

@Jerzy Bielec:
Sblam nie ma jak wpłynąć na kodowanie znaków przychodzących (tylko czyta dane), więc wydaje mi się, że „krzaki” na forum to jakiś problem poboczny.
np. jesteś pewien, że edytowałeś pliki forum edytorem, który nie zmienia kodowania plików?

@Wojciech Pietrzak:
każda niestandardowość pomaga zmylić głupie boty, ale przesadą jest nazywanie tego rozwiązania najskuteczniejszym. Gdyby ktoś chciał, to w 5 min może zmodyfikować bota, żeby wypełniał odpowiednio e-mail.

Sblam ma tą przewagę, że pozwala mieć forum bez wymogu potwierdzania adresu e-mail, a nawet kompletnie bez rejestracji = 0 fatygi ze strony użytkowników.

konto usunięte

Temat: pozbycie się spam-botów phpBB

Jerzy B.:
Zniechęciłem się. Jak mi powołani do tego fachowcy może założą forum by Przemo to spróbuję raz jeszcze powalczyć ze spamem... ale póki co mam jak najgorsze przeczucia i odczucia co do phpBB i...

Powinieneś mieć co najmniej:
- włączone CAPTCHA lub Advanced Visual Confirmation v1.1.0 do blokowania auto-rejestracji
- CTRACKER-a do blokowania prób hackowania
- dodane reguły na przekleństwa
- możesz też blokować adresy e-mail osób rejestrujących się (na pewno jest w phpBB Plus)
- wykonane wszystkie aktualizacje
- WAŻNE: zabezpieczone pliki php (CHMOD 444) i katalogi (CHMOD 755)
- WAŻNE: zabezpieczone web-hasłem (.htaccess) katalogi, do których użytkownik nie wchodzi (np. "include")

Ogólnie mam podobne odczucie. Ale nie dlatego, że soft jest źle napisany. Tzn raz mi się włamali ale właśnie przez brak CHMOD i jakiś durny kawałek kodu, który ktoś chyba specjalnie zostawił.

Problem z phpBB jest taki, że istnieją katalogi stron z phpBB z których korzystają hackerzy i skanują te skatalogowane strony w celu się do nich włamania i umieszczenia tam np. płatnych reklam.
I robią sobie rankingi kto ile włamów miał... Do tego istnieją strony, które publikują dziury w phpBB, w związku z czym mamy sytuacje:
- publikacja dziury w Internecie
- hacker przegląda sobie strony z phpBB w celu wykrycia portalu podatnego na włam
- tydzień później masz włam i reklamy zamiast forum
- kilka dni później masz lekarstwo na włam (np. na stronie phpBB Plus takie informacje publikują)

Wniosek z tego wywodu? Zastosować WSZYSTKIE przeciwśrodki z listy powyżej albo... napisać swoje własne forum...

Zwykle ci pseudo-hackerzy po prostu uruchamiają gotowe rozwiązania, więc jeśli będziesz miał mało znany skrypt na stronie to może Cię nie dopadną... A na samych spamerów dla mnie wystarczyło blokowanie domen e-mailowych.

konto usunięte

Temat: pozbycie się spam-botów phpBB

..:
Pierwsza sprawa, blokowanie po IP odpada, uno : dzieci Neostrady sa wsrod nas - zmienne IP, secundo, co zrobisz jak odetniesz router sieci osiedlowej od swojego forum ?

Owszem, spam przychodzi z różnych IP, w tym z zawirusowanych neostrad itp., ALE pod względem ilości spamu, to 5% adresów IP odpowiada za 90% spamów.

To są najczęściej adresy VPSów (np. home.pl mocno spamuje). Są też całe sieci pod kontrolą spamerów (zob. Spamhaus DROP).

Czarna lista nigdy nie wyeliminuje 100% spamu, ale spokojnie może obniżyć ilość spamów o 60-80% bez ryzyka zablokowania normalnego użytkownika.

Dlatego na sblam.com poza wtyczką też udostępniam czarną listę.

BTW: sblam do tej pory przeskanował 15 mln postów.



Wyślij zaproszenie do