NemProgrammering.dk logo

Sikkerhed i formularer – Beskyttelse mod SPAM

  Skrevet af: Kenneth     03-11-2012     Skrevet i: PHP

Hej allesammen

Jeg har netop implementeret et såkaldt CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart) på min egen hjemmeside og det virker rigtig godt.

Lav dit eget eller brug…, Ja Googles’

Mange vil nok trække håndbremsen og droppe CAPTCHA helt, fordi de regner med at det er en svær opgave at lave en integration af CAPTCHA på sin side, men jeg har fundet en mulighed, som mange hjemmesider i forvejen benytter sig af. Det hedder reCAPTCHA og er stillet til rådighed af, ja Google.

Lad os komme igang. Først skal du besøge dette link og oprette dig som bruger og derefter henter du et plugin til reCAPTCHA herfra.
Det plugin du har hentet skal så indsættes på siden ved at du via FTP uploader filen recaptchalib.php til serveren og dernæst skal vi til at redigere noget kode.

Koden – Den svære del?

Nu kommer vi til det svære, eller egentlig er det nok noget af det nemmeste jeg har prøvet. Vi skal have lavet koden der får magien til at ske.

Først skal vi indsætte noget php-kode i vores form-tag.

Vi laver en kontaktformular, så denne vil se således ud:

</pre>
<form action="send.php" method="POST">Navn: <input type="text" /> Email: <input type="email" /> Besked: <textarea name="besked"></textarea> <b>Indtast venligst nedenstående kode:</b> <!--?php require_once('recaptchalib.php'); $publickey = "test1234ABCTESTabc"; // you got this from the signup page echo recaptcha_get_html($publickey); ?--> <i>BEMÆRK! Koden er case-sensitive</i></form>
<pre>

Bemærk at jeg benytter type=”email” i feltet til mailadresse. Det gør jeg, da mobilbrowsere og nogle desktop-browsere, såsom Mozilla Firefox, automatisk validerer feltet for at se om der står en mailadresse. Dog ville man stadig skulle indsætte validering af felterne via javascript.
Som det næste skal vi lave det php-script der tjekker om brugeren har indtastet vores CAPTCHA korrekt. Dette gøres således:


<!--?php session_start(); require_once('recaptchalib.php'); $privatekey = "myprivatekey"; $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp->is_valid) {
// What happens when the CAPTCHA was entered incorrectly
die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
"(reCAPTCHA said: " . $resp->error . ")");
}
else {
echo 'reCAPTCHA passed';
$afsender = $_POST['navn'];
$epost = $_POST['epost'];
$textarea = $_POST['besked'];

$besked = 'Navn: '.$afsender.'
E-mail adresse '.$epost.'

'.$textarea.'

';


include 'mail_utf8.php';
//mail sendes
$success = mail_utf8('eksempel@eksempel.dk', $emne, $besked, 'robot@eksempel.dk', '', '');
echo 'Mail afsendt';
}
?-->

Filen mail_utf8.php er blot et mailscript som ligger frit tilgængeligt på nettet. Dette er et alternativ til php’s indbyggede mail-funktion, som man normalt bruger vha. mail().

Når du har lavet disse to filer, så kan du uploade dem til dit website.

Det sidste vi mangler er så at skifte temaet på vores CAPTCHA, da det fra default er rødt og dette passer jo ikke altid ind i ens eget design.

For at gøre dette skal vi blot bruge et par script-tags og lidt hjælp fra reCAPTCHA’s hjemmeside.

Personaliser din CAPTCHA

For at ændre udseendet på vores CAPTCHA skal du blot gøre følgende:

<script type="text/javascript">
var RecaptchaOptions = {
theme : 'clean'
};
</script>

Nu har jeg valgt at bruge det tema der hedder clean. Dog kan du på linket ovenfor se hvordan du nemt kan lave dit eget tema til reCAPTCHA.
Hvis du gerne vil se det hele i aktion, så besøg min kontaktside

Spørgsmål og kommentarer

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.