WebDev Zone.GR

Anti spam σε Φόρμα Επικοινωνίας

Πολλές φορές θα παρατηρήσατε ότι έρχονται διάφορα περίεργα email από κάποια φόρμα επικοινωνίας που έχετε δημιουργήσει. Τα email αυτά οφείλονται σε spam bots που βρίσκουν διάφορες φόρμες στο Διαδίκτυο και στέλνουν άχρηστα emails. Σε αυτό το βοήθημα θα σας δώσουμε μια πολύ απλή λύση ώστε να αποφύγετε ως ένα βαθμό το spamming.

Σε προηγούμενο βοήθημα δημιουργήσαμε μια φόρμα επικοινωνίας. Σε αυτό το βοήθημα θα προσθέσουμε απλά το σύστημα anti spam στον κώδικα της (και γενικά θα παρουσιάσουμε την διαδικασία).

Πρώτο βήμα είναι η δημιουργία μιας μεταβλητής που αποτελείται από ένα τυχαίο αριθμό. Καλούμε την μέθοδο rand() και βάζουμε το όριο διακύμανσης των τυχαίων τιμών.
<?php
$rand=rand(0, 9);
Τώρα πρέπει ο αριθμός να αναγράφεται ολογράφως γιατί είναι πιο δύσκολο να αναγνωστεί από τα spam bots. Για να το πετύχουμε αυτό χρησιμοποιούμε την μέθοδο str_replace() όπου βάζουμε για ορίσματα τι θα αναζητά σε ένα string και με τι θα το αντικαθιστά.
$search = array('0', '1', '2', '3', '4', '5','6','7','8','9');
$replace = array('μηδέν', 'ένα', 'δύο', 'τρία', 'τέσσερα','πέντε','έξι','εφτά','οκτώ','εννιά');
$randString = str_replace($search, $replace, $rand);
Και εισάγομε ένα πεδίο ώστε ο χρήστης να εισάγει την σωστή απάντηση
print "Ποιος είναι ο επόμενος αριθμός του <b>".$ randString."</b>";
$correctRand=$rand++;
?>
<input type="text" size="3" maxlength="3" name="userSubmitCheck" />
Και στο τέλος το στέλνουμε μέσω POST στο doSendForm.php για έλεγχο τοποθετώντας το ως κρυφό πεδίο πριν το
<input type="hidden" name="antispam" value="<?php echo $ correctRand ?>"/>
</form>
Τώρα ανοίγουμε το doSendForm.php ή το αρχείο που χειρίζεται τα POST events. Πρέπει να τα αποθηκεύσουμε σε μεταβλητές
$userSubmitCheck =(int)htmlspecialchars($_POST['userSubmitCheck']);
$antispam=(int)htmlspecialchars($_POST['antispam']);
Και κάνουμε τον εξής έλεγχο
if ($userSubmitCheck !=$antispam) {
print "Συμπληρώστε σωστά το πεδίο για antispam";
}else {
/// λοιπές εντολές για αποστολή mail
}
Πλέον έχουμε μια φόρμα επικοινωνίας όπου ο χρήστης βάζει χειροκίνητα τον επόμενο αριθμό απο αυτόν που θα του βγάζει το σύστημα! Και είναι έτοιμο

Εκτυπώθηκε από: http://www.webdevzone.gr
Κατηγορία: PHP
Ημερομηνία: Τρίτη, 25 Μαΐου 2010
Συγγραφέας: Seldimi