20
2010
IP Restriction mit Zend_Cache
Tach auch,
in diesem kurzen Beitrag will ich euch zeigen wie man mit wenig Aufwand eine effektive Ip Restriction für diverse Formulare (contact, polling, comments) mit Zend_Cache realisieren und einsetzen kann um sich vor Spammern oder Bots zu schützen.
Wir machen uns in diesem Fall einfach die Lifetime eines caches zu Nutzen, die Lifetime ist natürlich gleichbedeutend mit dem Intervall in dem ihr usern erlauben wollt Beiträge zu schreiben oder Votings durchzuführen.
Fangen wir doch einfach mal an:
Nehmen wir mal ein simples Kontakt Formular her in dem die zu sendende Nachricht über Zend_Mail verschickt werden soll. Ihr habt eine Funktion send() in dieser soll nun der vorher eingegebene Inhalt an euch verschickt werden.
<?php
public function send($to, $from, $subject, $text)
{
$mail = new Zend_Mail();
$mail->addTo($to)
->setFrom($from)
->setSubject($subject)
->setBodyText($text)
->send();
}
?>
In der jetzigen Form kann euch jeder Bot oder Spammer ständig mit Mails bombadieren.
Das Ändern wir nun.
<?php
public function send($to, $from, $subject, $text)
{
if ($this->_isAllowed())
{
$mail = new Zend_Mail();
$mail->addTo($to)
->setFrom($from)
->setSubject($subject)
->setBodyText($text)
->send();
}else
{
return false;
}
}
...
protected function _isAllowed ()
{
$cache = Zend_Cache::factory(
'Core',
'File',
array ('lifetime' => 300),
array ('cache_dir' => '/var/cache')
);
$cacheId = md5($_SERVER['REMOTE_ADDR']);
if (!$result = $cache->load($cacheId))
{
$cache->save($_SERVER['REMOTE_ADDR'], $cacheId);
return true;
} else
{
return false;
}
}
?>
Was haben wir gemacht?
Zunächst haben wir in der Funktion _isAllowed() über die Zend_Cache factory einen Cache mit einer Lifetime von 5 Minuten erstellt. Anschließend holen wir uns über die Superglobal $_SERVER die IP Adresse des Posters und nehmen diese als md5 für unsere Cache Id her. Nun fragen wir über load($cacheId) ab ob dieses cachefile schon existiert bzw. es noch gültig ist. Falls nein erstellen wir es und schreiben einfach die IP Adresse rein und geben true zurück d.h. der User darf posten. Falls das cachefile schon existiert geben wir false zurück in dem Fall wissen wir, dass der User noch keine Erlaubnis hat die Nachricht zu schicken.
Das Ergebnis dieser Funktion kann man jetzt auswerten und eine entsprechende Meldung bringen. Das wars schon
Beispiel:
http://predscore.de/contact
Ähnliche Artikel
Letzte Kommentare
- PHP 5.4 – die Neuerungen im Überblick at PHP, SEO, Software, Programmierung bei Kurzschreibweise für Arrays ab PHP 5.4
- Jevo bei Ajax mit dem ZF und jQuery – HOW TO
- Jevo bei Ajax mit dem ZF und jQuery – HOW TO
- Jan bei Ajax mit dem ZF und jQuery – HOW TO
- Wotan bei Ubuntu Panel zurücksetzen / wiederherstellen
von







