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







