RSS

zapisz się: RSS Artykuły

szukaj

Ochrona przed spamem w komentarzach - wersja ulepszona

Komentarze 3

Znak stop spamowiZgodnie 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".

Podziel się

Bookmark and Share

  1. spioch
    spioch napisał(a):

    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 ?

  2. Paweł Landzberg
    Paweł Landzberg napisał(a):

    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.

  3. Patrycjusz Różański
    Patrycjusz Różański napisał(a):

    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

Komentowanie zostało zablokowane