Tato jednoduchá ochrana spočívá v tom, že se do formuláře vloží neviditelné pole, které je pak porovnáváno s výsledkem a to za pomoci JavaScriptu a PHP.
Normální návštěvníci tak nemusí vyplňovat žádné bezpečnostní pole, protože je skryto JavaScriptem. Roboti rozesílající spam však většinou nemají JavaScript povolen (spuštěn), proto se jim nepodaří data z formuláře odeslat.
Nejprve do formuláře vložíme klasické formulářové pole (input) typ text a celé jej „obalíme“ nějakým prvkem s ID, např. odstavec s ID „spamprotirobotum“:
<p id="spamprotirobotum"> <input type="text" name="robot" value="" id="protirobotum"> </p>
Dále musíme vložit na konec stránky tento JavaScript, který má dvě části. Jedna vloží do hodnoty pole formuláře např. číslo. V tomto případě je ještě navíc lehce ztíženo čtení o prvek násobení (konkrétně 6×20, což dává ve výsledku 120):
<script> /* vložíme do políčka číslo */ document.getElementById("protirobotum").value = 6 * 20; /* a poté políčko zneviditelníme */ document.getElementById("spamprotirobotum").style.display = "none"; </script>
Nakonec vložíme zaslanou hodnotu do proměnné a necháme ji zkontrolovat podmínkou. Pokud je pravdivá, vykoná se vyhodnocení dat formuláře:
$robot = $_POST['robot']; //do proměnné uložíme obsah políčka if($robot == 120){ //sem vložíte celý Váš PHP skript a pokud podmínka nebude splněna, nic se neprovede. }
Celý soubor s formulářem může vypadat např. takto:
<!DOCTYPE html> <html lang='cs'> <head> <title>Ochrana proti SPAMu</title> <meta charset='utf-8'> </head> <body> <h1>Ukázka ochrany formuláře proti SPAMu</h1> <form action="vysledek.php" method="post"> <p>Vaše jméno:<br> <input type="text" name="jmeno"> </p> <p>Příspěvek:<br> <textarea name="prispevek" cols="40" rows="3"></textarea> </p> <!-- vložíme ochranné pole, které je při zobrazení v prohlížeči skryto --> <p id="spamprotirobotum">Ochrana proti spamu. Napište číslo stodvacet: <input type="text" name="robot" value="" id="protirobotum"> </p> <input type="submit"> </form> <script> /* vložíme do políčka číslo */ document.getElementById("protirobotum").value = 6 * 20; /* a poté políčko zneviditelníme */ document.getElementById("spamprotirobotum").style.display = "none"; </script> </body> </html>
Soubor s výsledkem může vypadat např. takto:
<?php $robot = $_POST['robot']; //do proměnné uložíme obsah pole s id robot if($robot == 120) { //sem vložíte vše, co se má ukázat, když je podmínka splněna. echo "Zadali jste správně bezpečnostní otázku. Bude tedy zobrazen následující kód..."; echo "<p>Vytvořil: ".$_POST['jmeno']."<br><p>Příspěvek: ".$_POST['prispevek']."</p><hr>"; } else echo "Nebyl zadán správně bezpečnostní kód!"; ?>
Zdroj: https://mujskript.cz/php