Zgodnie z zaleceniem Matta Jones'a wprowadziłem w życie jego ulepszoną wersję antyspamu w komentarzach. Ma ona kilka dosyć istotnych ulepszeń. Po pierwsze nie generuje za każdym razem nowego obrazka (co w przypadku wielu zapytań mogłoby być uciążliwe). Obrazki zapisywane są w specjalnym folderze. Najpierw skrypt sprawdza czy dany obrazek znajduje się w folderze, jeśli nie to generuje go i zapisuje od razu tam, żeby w razie czego móc później z niego skorzystać.
Kolejną istotną rzeczą jest to, iż całość moda jest w pliku "snews.php". W poprzedniej wersji skrypt kodujący znajdował się w pliku "capgen.php" i mógł być podczas pobierania rozczytany przez boty. Dodatkowo kod ma teraz więcej zmiennych utrudniających jego rozkodowanie.
Ok, przejdźmy do rzeczy. W pliku "snews.php" zamieniamy funkcję "mathCaptcha" na następującą:
// MATH CAPTCHA
function mathCaptcha() {
$my_salt = "123"; // wpisz tu dowolny ciag znakow
$my_captcha_folder = 'captchas/'; //stworz ten folder w miejscu gdzie masz plik snews.php
$mathkey = date('d'); // new key for every day of the month, max 81 images in a day will save tons of resources on busy sites
$x = rand(1, 9);
$y = rand(1, 9);
$_SESSION[_SITE.'mathCaptcha-digit'] = $x + $y;
$math = '
<p><label for="calc">
* '.l('math_captcha').':
</label><br />';
if(!function_exists('imagecreate') || !is_dir($my_captcha_folder) || !is_writable($my_captcha_folder)) { // either php isn't configured to create images or the captcha folder doesn't exist/isn't writable so let's fall back to the standard text mathCaptcha
$math .= $x.' + '.$y.' = ';
} else {
$key = $x.$my_salt.$mathkey.$y;
$md5_name = md5($key).'.png'; // name of png image we want
if(!file_exists($my_captcha_folder.$md5_name)) { // image doesn't already exist
$my_img = imagecreate(80, 20); // let's create a new one using the day of the month, my salt and the $x & $y
imagesavealpha($my_img, true);
$trans_color = imagecolorallocatealpha($my_img, 0, 0, 0, 127);
imagefill($my_img, 0, 0, $trans_color);
$text_color = imagecolorallocate($my_img, 0, 0, 0);
imagestring($my_img, 5, 10, 3, "$x + $y =",
$text_color);
imagesetthickness($my_img, 5);
imagepng($my_img,$my_captcha_folder.$md5_name); // save the image to the captchas folder
}
$math .= '<img src="'._SITE.$my_captcha_folder.$md5_name.'" alt="" style="vertical-align:middle" />'; // serve the image
}
$math .= '
<input type="text" name="calc" id="calc" style="vertical-align:middle" />
</p>';
return $math;
}
W pierwszej zaznaczonej części wpisujemy dowolny ciąg znaków, a drugi zaznaczony fragment to nazwa katalogu, który należy stworzyć i umieścić w miejscu, gdzie mamy zainstalowane sNews. Tam będą przechowywane obrazki. Całość wysyłamy na serwer. Jeśli mieliśmy starą wersję antyspamu to usuwamy dodatkowo z serwera plik "capgen.php".
Coś podobnego albo identycznego uruchomiłem u siebie i po jakimś czasie w katalogu captchas zebrało sie pare tysiecy plikow. I to byl chyba powod lekkiego spowolnienia ladowania stron. Jak jest u Ciebie, przybywa plików?
I druga sprawa. Czy masz, możesz polecić źródło polskiego pliku badwords ?
Jakoś specjalnie nie zwracam uwagi czy tam się zbierają pliki ;) A jakiegoś spowolnienia działania strony nie widzę. Jeśli chodzi o badwords to nie znam żadnego źródła, bo nie używam tej funkcjonalności.
Tak obrazki narastają ale już powoli szykuje się ominięcie możliwości wpisywania match poprzez ukrywanie formularza dla robotów :D
a co do badwords są tu