Chytrá a neotravná antispamová ochrana

Určitě Vás trápí ten otravný spam v diskusích, komentářích, při registraci, nebo při kontaktním formuláři na Vašem webu.

 

Existuje jednoduché a fikané řešení v JavaScriptu. Není moc, co o tom psát, ale ve zkratce popíšu funkčnost.

Na webu máte input, u kterého je napsáno, že máte napsat například číslo 1234 (nějak tajně, třeba tisíc-dvě stě -třicet čtyři). Jelikož by tento input ale návštěvníky otravoval, tak se do tohoto pole automaticky pomocí JavaScriptu vloží číslo 1234 a políčko se i s textem skryje (display: hidden).

 

V případě, že někdo má JavaScript vypnutý (do této skupinu patří roboti, třeba Google, jenž JavaScript neumí interpretovat), tak se mu zobrazí jak input, tak i text a musí toto políčko sám a ručně vyplnit. Jak účinné.

 

No a potom stačí jen v PHP vytvořit podmínku, že pokud v tom a tom inputu bylo yplněno správně číslo 1234, tak se bude dále ve skriptu pokračovat – odesláním dat do DB, nebo třeba e-mailu.

 

Abyste to ale neměli tak těžké, tak pro Vás níže přikládám plně funkční skript (s dovolením převzato z DJPW. Díky):

Do HTML formuláře stačí přiložit políčko

<p id="spamprotirobotum">
  Ochrana proti spamu. Napište prosím číslo tisíc-dvě stě-třicet čtyři: 
  <input type="text" name="robot" value="" id="protirobotum">
</p>

 

a kousek JavaScriptu, který doplní automaticky číslo a zneviditelní políčko (robotovi se JavaScriptová událost neprovede – neumí ho zpracovat). Ještě v JavaScriptu vkládané číslo trošku zošklivíme – musí se nejprve vynásobit (2×617, což je 1234) :

<script> 
  /* vložíme do políčka číslo */ 
  document.getElementById("protirobotum").value = 2 * 617;  

  /* a poté políčko zneviditelníme */ 
  document.getElementById("spamprotirobotum").style.display = "none"; 
</script>

 

A nakonec potom v PHP zjistíme, zda políčko obsahuje správné číslo (a do této podmínky dáme zbytek celého skriptu):

$robot = $_POST['robot']; //do proměnné uložíme obsah políčka  
if($robot == 1234){

  //sem vložíte celý Váš PHP skript a pokud podmínka nebude splněna, nic se neprovede.  

}

 

To je vše 🙂

 

Napište komentář!