Autor wpisu: batman, dodany: 04.03.2011 08:00, tagi: zend_framework
Najpopularniejszym i póki co najskuteczniejszym zabezpieczeniem przed spamowaniem naszych formularzy jest captcha. Zend Framework, aspirujący do miana najkompletniejszej biblioteki dla języka PHP, dostarcza komponent Zend_Captcha, który w prosty sposób integruje się z formularzem. W kilku prostych krokach jesteśmy w stanie uodpornić nasz formularz na spamujące roboty.
Przed przystąpieniem do konfigurowania captchy, musimy uzbroić się w plik z czcionką, jaka zostanie użyta do utrudnienia życia spamerom. Czcionkę możemy znaleźć np. na stronie Google Web Fonts. Po pobraniu czcionki umieszczamy ją w projekcie. W moim przypadku jest to katalog data znajdujący się na tym samym poziomie co application. Następnie w publicznym katalogu musimy utworzyć katalog na wygenerowane pliki z kodem.
Nadeszła pora na skonfigurowanie captchy.
$captchaImage = new Zend_Captcha_Image();
$captchaImage->setFont(APPLICATION_PATH . '/../data/Kreon-Regular.ttf')
->setFontSize(36)
->setImgDir(APPLICATION_PATH . '/../public/captcha')
->setImgUrl('/captcha')
->setExpiration(90)
->setGcFreq(5)
->setWidth(200)
->setHeight(100)
->setTimeout(60)
->setWordlen(5);
Mimo iż powyższy kod do najpiękniejszych nie należy, doskonale spełnia swoje zadanie. Kolejne metody odpowiadają za:
- setFont – ustawienie czcionki jaka zostanie użyta na obrazku
- setFontSize – ustawienie rozmiaru czcionki
- setImgDir – ustawienie katalogu, w którym będą przechowywane obrazki z kodem
- setImgUrl – ścieżka do obrazków wstawiana do znacznika img
- setExpiration – data ważności wygenerowanych plików
- setGcFreq – ustawienie ilości requestów, po których usunięte zostaną nieaktualne obrazki z kodem
- setWidth, setHeight – ustawienie szerokości i wysokości obrazka z kodem
- setTimeout – ustawienie czasu ważności sesji dla aktualnego obrazka z kodem
- setWordlen – ustawienie ilości liter wyświetlanych na obrazku
Po przebrnięciu przez gąszcz ustawień, możemy przejść do budowania formularza. W tym celu skorzystamy z klasy Zend_Form_Element_Captcha opakowującej stworzą wcześniej captchę w dekoratory formularza oraz ustawiająca odpowiedni walidator.
Całość wygląda następująco.
class Application_Form_Formularz extends Zend_Form
{
public function init()
{
$captchaImage = new Zend_Captcha_Image();
$captchaImage->setFont(APPLICATION_PATH . '/../data/Kreon-Regular.ttf')
->setFontSize(36)
->setImgDir(APPLICATION_PATH . '/../public/captcha')
->setImgUrl('/captcha')
->setExpiration(90)
->setGcFreq(5)
->setWidth(200)
->setHeight(100)
->setTimeout(60)
->setWordlen(5);
$captcha = new Zend_Form_Element_Captcha(
'txt_captcha',
array(
'captcha' => $captchaImage
)
);
$this->addElement($captcha);
}
}
W celach prezentacyjnych ograniczyłem formularz do minimum.
Na koniec ważna uwaga. Jeśli będziecie chcieli modyfikować dekoratory, pamiętajcie, że Zend_Form_Element_Captcha nie korzysta z dekoratora ViewHelper. Zamiast niego należy użyć dekoratora Captcha.
Kanał ATOM

Obrazek bazy danych polityków zrobiłem fajnym narzędziem online