AntiSpam bez pouzitia Captcha

Sekcia o programovaní, programovacích jazykoch...
Používateľov profilový obrázok
munina
Používateľ
Používateľ
Príspevky: 257
Dátum registrácie: So 03. Dec, 2005, 20:00
Bydlisko: Trnava

AntiSpam bez pouzitia Captcha

Príspevok od používateľa munina »

Ahojte,

vedeli by ste mi, prosim, poradit PHP AntiSpam pouzitelny v kontaktnom formulary bez pouzitia Captcha, alebo inej viditelnej "dopisovacky"? Nemusi byt 100%, staci, ak odbura cca 80% spamov. To by som uz prezil.

Kontaktny formular ma aktualne taketo podmienky:

Kód: Vybrať všetko

$errors = array();
if(strlen($name) < 3) {
  if(!$name) {
    $errors[] = "Musíte zadať meno";
  } else {
    $errors[] = "Meno musí obsahovať minimálne 3 znaky.";
  }
}
if(!$email) {
  $errors[] = "Musíte zadať email.";
} else if(!validEmail($email)) {
  $errors[] = "Zadali ste neplatný email.";
}

if(strlen($message) < 10) {
  if(!$message) {
    $errors[] = "Nenapísali ste žiadnu správu.";
  } else {
    $errors[] = "Správa musí obsahovať minimálne 10 znakov.";
  }
}
Rozmyslal som, ze by mozno pomohlo, nakolko vacsina spamov je v azbuke alebo v cinskom logofonetickom pisme, pridat dalsiu podmienku:

Kód: Vybrať všetko

$charlist = "ABCDEFGHJKLMNPQRSTUVWXYZ0123456789#*&^$@%><";
$cnt = strlen($charlist) - 1;
$char = "";
while(strlen($char) < 6)
  {
    $char .= $charlist[rand(0,$cnt)];
  }
Dobre uvazujem? Myslim, ze by to pomohlo. Len moje PHP schopnosti/neschopnosti mi nedovoluju tento prvok zakomponovat do kodu.

Vedel by mi to niekto dat do hromady?

Vopred velmi pekne dakujem :-)
Naposledy upravil/-a munina v Št 25. Júl, 2013, 16:42, upravené celkom 1 krát.
Používateľov profilový obrázok
munina
Používateľ
Používateľ
Príspevky: 257
Dátum registrácie: So 03. Dec, 2005, 20:00
Bydlisko: Trnava

Re: AntiSpam bez pouzitia Captcha

Príspevok od používateľa munina »

Kamarat mi nakodoval stvrty odstavec

Kód: Vybrať všetko

$charlist = "AÁÄBCČDĎEÉFGHIÍJKLĹĽMNŇOÓÔPQRŔSŠTŤUÚVWXYÝZŽaáäbcčdďeéfghiíjklĺľmnňoóôpqrŕsštťuúvwxyýzž0123456789!?#$%&'()*+,.:\/<=>@[]^_`{|}„“—”©®™+-×÷° ";
$cnt = strlen($message);
 $messageOk = true;
 for ($i = 0; $i < $cnt; $i++) {
 if (!(stripos($charlist, $message[$i]) !== false)) {
 $messageOk = false;
 }
}
if (!$messageOk) {
$errors[] = "Použili ste nepovolené znaky. Ako ochranu pred spamom sme obmedzili znaky na slovenskú abecedu s diakritikou a často používané znaky a symboly.";
}
Ako iny druh AntiSpamu funguje perfektne, ale podmienka nepozna dalsi riadok. Cize pokial niekto pise a dava nove riadky s enterom, podmienka je nesplnena a mail neodosle.

Skusal som pridat znaky ako napr: ↵ (v UTF-8 zobrazeny ako stvorcek) /n <br> ale nic nepomaha.. nejaky napad?
Používateľov profilový obrázok
munina
Používateľ
Používateľ
Príspevky: 257
Dátum registrácie: So 03. Dec, 2005, 20:00
Bydlisko: Trnava

Re: AntiSpam bez pouzitia Captcha

Príspevok od používateľa munina »

Diky za pomoc, mam to vyriesene :-) Snad to posluzi aj niekomu inemu.

Kód: Vybrať všetko

$charlist = "AÁÄBCČDĎEÉFGHIÍJKLĹĽMNŇOÓÔPQRŔSŠTŤUÚVWXYÝZŽaáäbcčdďeéfghiíjklĺľmnňoóôpqrŕsštťuúvwxyýzž0123456789!?#$%&'()*+,.:;\/<=>@[]^_`{|}„“—”©®™+-×÷° \n \r";
$cnt = strlen($message);
$messageOk = true;
$abnormalChars = '';
for ($i = 0; $i < $cnt; $i++) {
    if (!(stripos($charlist, $message[$i]) !== false)) {
        $abnormalChars .= $message[$i];
        $messageOk = false;        
    }
}
if (!$messageOk) {
    $errors[] = "V správe sa vyskytli abnormálne znaky: ".$abnormalChars;
}

Návrat na "Programovanie"