Archiwum dla kategorii Programowanie

Na wstępie zaznaczę, iż jestem przeciwnikiem phpBB (lista zarzutów jest na tyle długa, a ja na tyle leniwy, że nie przytoczę ich tutaj), a tym bardziej modyfikacji by Przemo. Ale cóż…

Niedawno na jednym forum zauważyłem sporo kont utworzonych przez body (linki stron WWW kierowały głównie do pornografii). Forum stworzone na bazie Przemo phpBB i zabezpieczone mechanizmem CAPTCHA. Zabezpieczenie okazało się zbyt słabe.

Jest kilka możliwości wzmocnienia mechanizmu autentyfikacji. Można na przykład poprocić użytkownika przy rejestracji aby wpisał w dane pole konkretne słowo, a następnie sprawdzić jego poprawność. Jeszcze lepiej wykorzystać zamiast stałego słowa prostej operacji matematycznej czy podobnych rozwiązań.

W blogu http://psavel.jogger.pl/2007/01/22/phpbb-vs-spamboty/ pojaw iła się metoda opierająca się na lekkiej modyfikacji CAPTCHA. W skrócie polega to na tym, aby użytkownik przed (lub po) literami captcha wpisał inny, odgórnie ustalony i podany w instrukcji znak. Autor podał dokładną instrukcję krok po kroku jakie zmiany należy wprowadzić do skryptów phpbb.

Okazuje się jednak, iż modyfikacja przemo używa innego mechanizmu captcha. Oto lista zmian, które należy dokonać:

1. Szukamy w pliku includes/usercp_register.php:

if ( ( strtolower($HTTP_POST_VARS[‘reg_key’]) != $anti_robot_row[‘reg_key’] ) || !$anti_robot_row[‘reg_key’] )

i zmieniamy na na przykład (dodajemy ‘X’):

if ( ( strtolower($HTTP_POST_VARS[‘reg_key’]) != ‘x’.$anti_robot_row[‘reg_key’] ) || !$anti_robot_row[‘reg_key’] )

2. W pliku templates//profile_add_body.tpl szukamy:

<span class="gen">{validation.VALIDATION}
<input name="reg_key" class="post" onfocus="Active(this)" onblur="NotActive(this)" maxlength="4" size="24" type="text" /></span>

i rozszerzamy pole tekstowe co najmniej o jeden znak (w tym wypadku o 4 znaki do wartości 8):

<span class="gen">{validation.VALIDATION}
<input name="reg_key" class="post" onfocus="Active(this)" onblur="NotActive(this)" maxlength="8" size="24" type="text" /></span>

3. Modyfikujemy opis, dodając instrukcję dotyczącą konieczności umieszczenia na początku dodatkowego znaku:

$lang[‘Validation_explain’] = ‘Żeby mieć pewność że nie jesteś robotem, wpisz wyświetlone cyfry.’;

na:

$lang[‘Validation_explain’] = ‘Żeby mieć pewność że nie jesteś robotem, wpisz wyświetlone cyfry. <strong>Ważne! Do kodu dołącz na samym początku literę "X"!</strong>’;

To chyba tyle. Jak na razie działa.