1. Nikako? Ne. Nisam se sjetio.
2. CAPTCHA? Ne. Gnjavaža za čitatelja.
3. Logiranje usera? Ne. Još veća gnjavaža.
4. Ovjera komentara? Ne. Gnjavaža za mene.
5. Dodatni moduli (e.g. Bayesian filteri)? Ne. Nedjelotvorno.
6. Magija? Ne. Španjolska za mene.
7. Zdravom logikom implementiranom u par linija koda? Kriv.
• • • • •
Logika se sastoji od dva dijela:
Dio prvi
Provjera da li je forma submitana na istom IPu na kojem je formirana. Dakle tamo gdje se generira leži nešto poput ovog:
<form method="post" action="...">
<input type="hidden" name="ip" value="<?= $_SERVER['REMOTE_ADDR'] ?>">
...
</form>
i kad se komentar obrađuje:
<?
if($_POST['ip'] == $_SERVER['REMOTE_ADDR'])
{
// obradi komentar
...
}
?>
Dio drugi
Kalkuliranje da li je prošlo iks sekundi od generiranja i slanja komentara:
<form method="post" action="...">
<input type="hidden" name="ip" value="<?= $_SERVER['REMOTE_ADDR'] ?>">
<input type="hidden" name="time" value="<?= time() ?>">
...
</form>
a tamo gdje se komentar obrađuje (te unutar gornjeg koda):
<?
if(time() - $_POST['time'] < 5)
{
echo "Pokušaj postanja unutar 5 sekundi!";
}
else
{
// obradi korisnika
}
?>
I to je to. Naravno smradovi od spamera mogu uskoro zaobići ove finte (zato i jest dio I u naslovu ovog posta), ali do tada nek se spamaju sami.
A ja umjesto da ručno brišem spam imam vremena otići na pivo.