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

Τρίτη, 25 Μαΐου 2010
Εκτύπωση Αποστολή
[x] Αποστολή σε φίλο





Αποστολή Σε Φίλο


Πολλές φορές θα παρατηρήσατε ότι έρχονται διάφορα περίεργα 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
}
Πλέον έχουμε μια φόρμα επικοινωνίας όπου ο χρήστης βάζει χειροκίνητα τον επόμενο αριθμό απο αυτόν που θα του βγάζει το σύστημα! Και είναι έτοιμο
Add to Delicious Add to digg Add to Facebook Follow to Twitter
Ο/Η Seldimi την είπε:
Η παραπάνω μέθοδος δεν είναι τόσο ασφαλής όμως κατά την μεταφορά του σωστού συνδιασμού... Για μεγαλύτερη ασφάλεια μπορείτε να αποθηκεύσετε την μεταβλητή $correctRand με $_SESSIONs
Web Development, Web Design & SEO - Webdev Zone
Web Development, Web Design & SEO