Validiranje na strežniku

Validacija na strani strežnika je potrebna zato, ker je seveda možno na strani odjemalca manipulirati s kodo. Validacija je sicer odvisna od vrste tehnologije, ki jo uporabljamo, načeloma pa se deli na dva tipa: ročno in vgrajeno. Ročno je potrebno izvesti v primeru implementacije v JavaScriptu, medtem ko je vgrajena na voljo na primer ob implementaciji v PHP. Oba primera validacije bosta sicer predstavljena v jeziku PHP in sicer v datoteki, ki sprejme zahtevek iz forme

Vgrajena validacija

Pri tej obliki je potrebno poskrbeti za uvoz datoteke keycaptcha.php in nato klicati funkcijo check_result(). V kolikor funkcije vrne true je validacija uspela, sicer ni.

<?php
if (!class_exists('KeyCAPTCHA_CLASS')) {
	include('keycaptcha.php');
}
$kc_o = new KeyCAPTCHA_CLASS();
if ($kc_o->check_result($_POST['capcode'])) {
	echo "Validacija je uspela!";
}
else {
	echo "Validacija ni uspela!";
}
Sedaj lahko formo, ki smo jo sestavili v prejšnjem poglavju, nadgradimo tako, da nastavimo kot vrednost atributa action pot do naše datoteke v kateri smo implementirali validacijo. Pri tem smo pozorni, da je tudi method nastavljen na POST, saj pri validaciji pričakujemo POST zahtevo.

Ročna validacija

Pri validaciji je potrebno analizirati podatke, ki so zabeleženi v skritem polju, katerega smo mi poimenovali skritoPolje. Podatki so semantično ločeni z navpičnimi črtami po takšnem vzorcu: A|B|C|D... Naša naloga je, da te podatke na ustrezni način razdelimo in preverimo njihovo pravilnost.

Najprej celotno šifro razdelimo na posamezne dele, nato pa je potrebno preveriti, če je bila skrita šifra sploh prejeta s strani KeyCAPTCHA strežnika, za kar uporabimo to formulo:

A == md5('accept'.B.PRIVATNI_KLJUC.C)
Sedaj pošljemo še GET zahtevo na spletni naslov, ki je shranjen v polju C, za kar smo v našem primeru uporabili funkcijo file_get_contents(). Celoten primer validacije izgleda tako:
<?php
$privatni_kljuc = "1234567";
$skritaSifra = $_POST["skritaSifra"];
$skritaSifraArr = explode("|", $skritaSifra);
if (count($skritaSifraArr) < 4) {
    //Napacni format sifre
     echo "Napacni format sifre";
}
if ($skritaSifraArr[0] == md5("accept" . $skritaSifraArr[1] . $privatni_kljuc . $skritaSifraArr[2])) {
     if (file_get_contents($skritaSifraArr[2]) == "1") {
        //Validacija je uspela
        echo "Validacija je uspela!";
    }
    else{
        //Napaka pri validaciji ali ponarejena skrita sifra
         echo "Validacija ni uspela!";
    }
}
V kolikor nadgradimo primer iz poglavja Implementacija v JavaScript-u tako, da se ob potrditvi forme kliče zgoraj definirana datoteka, dobimo delujoč primer, ki ga vidimo spodaj.