a_captchaΣε προηγούμενη ανάρτησή μας, είδαμε μερικούς λόγους που οδηγούν στη χρήση captcha.

Στην παρούσα θα δούμε πώς φτιάχνεται ένα απλό captcha με τη χρήση PHP και ολίγη JavaScript.

Ξεκινώντας να σχεδιάσουμε τη διαδικασία, είναι απλό και υψηλού επιπέδου Διάγραμμα Μεταβολής Καταστάσεων είναι ιδιαίτερα βοηθητικό.

std

Ακολούθως, το πρώτο βήμα μας απαιτεί να ετοιμάσουμε μια εικόνα με τυχαίους χαρακτήρες (αρχείο text2image.php). Πρώτα πρέπει να ετοιμάσουμε ένα τυχαίο κείμενο που θα πρέπει να είναι ευανάγνωστο και επίσης γνωστό από σελίδα σε σελίδα της PPH. Για το πρώτο μέρος αντικαθιστούμε γράμματα όπως τα ‘0’, ‘O’, ‘D’, ‘1’, ‘8’, ‘B’ με άλλα και στη συνέχεια αναθέτουμε το τελικό κείμενο σε μια μεταβλητή τύπου $_SESSION.

Για να προσθέσουμε δυσκολία στις μηχανές Optical Character Recognition (OCR), ετοιμάζουμε κι ένα πλήθος από χρωματιστά ευθύγραμμα τμήματα που θα πέσουν σε τυχαίες θέσεις μέσα στην εικόνα μας.

Στη συνέχεια ετοιμάζουμε τυχαίες γωνίες περιστροφής του κειμένου μας ώστε να δυσκολέψουμε περισσότερο το OCRing.

Συνεχίζοντας στο μονοπάτι περαιτέρω αύξησης της δυσκολίας OCRing ετοιμάζουμε και χρωματιστά pixel που επίσης θα πέσουν σε τυχαίες θέσεις μέσα στην εικόνα μας.

Ύστερα, εφόσον διαλέξουμε τη γραμματοσειρά που θα χρησιμοποιήσουμε, συνδυάζουμε τα παραπάνω σε μια εικόνα με τη χρήση της βιβλιοθήκης imagettftext της PHP.

Πριν τελειώσουμε, δημιουργούμε 4 τυχαία γράμματα που τα τοποθετούμε στις 4 γωνίες τις εικόνας με χρώμα σχεδόν λευκό, ώστε να μην είναι ορατά από άνθρωπο, και ΔΕΝ τα συμπεριλαμβάνουμε στο αλφαριθμητικό για περαιτέρω δυσκολία του OCRing.

Έχοντας τελειώσει με τη δημιουργία της εικόνας, ετοιμάζουμε την αρχική μας σελίδα (αρχείο index.php), δηλαδή το σημείο που θα παρουσιάζεται η εικόνα και θα ζητείται από τον χρήστη να την αναγνωρίσει.

Δημιουργούμε μια απλή html form με ένα πεδίο κειμένου και ένα κουμπί κατάθεσης, ενώ η εικόνα παρουσιάζεται με τη χρήση της ετικέτας μόνο που στην ιδιότητα src θέτουμε την τιμή «text2image.php». Θέτουμε JavaScript ελέγχους προ της αποστολής στον στόχο της form και προσθέτουμε λίγο «πιπεράκι» δίνοντας ευκαιρία στο χρήστη να ανανεώσει το αλφαριθμητικό με χρήση AJAX

Στον στόχο της form, τη σελίδα backend.php, επιβεβαιώνουμε πως το όρισμα του πεδίου έχει παραληφθεί και είτε αν είναι όμοιο με την τιμή που αναθέσαμε στη μεταβλητή τύπου $_SESSION εκτελούμε το αντίστοιχο μέρος του κώδικα για ορθή απάντηση captcha είτε επιστρέφουμε λάθος με JavaScript alert και προωθούμε τον χρήστη στη σελίδα εισαγωγής του captcha.

Είναι απόλυτα σίγουρο πως ένα τόσο απλό captcha (δηλαδή χωρίς παραμόρφωση και περιστροφή κάθε γράμματος ξεχωριστά) δε θα αντέξει εκτεταμένης ισχύος OCRing ούτε για αστείο. Ωστόσο, είναι επίσης σίγουρο ότι θα αντέξει τις απλές καθημερινές δράσεις αυτοματοποιημένης συμπλήρωσης forms, όταν δε διακυβεύεται κάτι σημαντικό. Με άλλα λόγια, προκύπτει το, σχεδόν φιλοσοφικό ερώτημα, ποιά η ενέργεια που οφείλει να ξοδέψει κανείς για την προστασία ενός αντικειμένου/υπηρεσίας και πώς αυτή συσχετίζεται με την αξία του αντικειμένου/υπηρεσίας;

Στο τρίτο και τελευταίο μέρος της σειράς αυτής θα δούμε πώς αντιμετωπίζουν το CAPTCHA στις μέρες μας γίγαντες της πληροφορικής όπως η google, facebook, apple κ.α. στις οποίες η παραπάνω ισορροπία είναι ιδιαίτερα ευαίσθητη λόγω σημαντικότητας των υπηρεσιών και πλήθους χρηστών!

Κατεβάστε τον πλήρη κώδικα του captcha μας

Share This: