Το CAPTCHA υπάρχει – αλλά δεν προστατεύει τίποτα
Ένα ορατό widget reCAPTCHA, hCaptcha ή Turnstile λέει λίγα για το αν μια φόρμα προστατεύεται. Ακολουθούν οι τυπικές λανθασμένες ρυθμίσεις και πώς να ελέγξετε τις δικές σας φόρμες μέσα σε λίγα λεπτά.
Πολλοί ιδιοκτήτες ιστότοπων προσθέτουν ένα CAPTCHA στη φόρμα επικοινωνίας τους, βλέπουν να εμφανίζεται το μικρό σήμα ή το πλαίσιο επιλογής και θεωρούν ότι το πρόβλημα του spam λύθηκε. Και μετά τα σκουπίδια συνεχίζουν να έρχονται. Συχνά το ίδιο το CAPTCHA είναι εντάξει – απλώς δεν είναι συνδεδεμένο με τίποτα που θα μπορούσε να σταματήσει ένα bot. Το άρθρο αυτό εξετάζει τους τυπικούς τρόπους με τους οποίους τα reCAPTCHA, hCaptcha και Cloudflare Turnstile καταλήγουν διακοσμητικά, και πώς να ελέγξετε τις δικές σας φόρμες.
Πού γίνεται πραγματικά η προστασία
Και οι τρεις υπηρεσίες λειτουργούν με την ίδια αρχή. Ένα script στο πρόγραμμα περιήγησης εκτελεί τους ελέγχους του και δίνει στη φόρμα ένα token – μια σύντομη συμβολοσειρά που λέει «αυτός ο επισκέπτης πέρασε». Το token ταξιδεύει μαζί με την υποβολή της φόρμας στον διακομιστή σας. Μόνο εκεί λαμβάνεται η πραγματική απόφαση: ο διακομιστής σας στέλνει το token μαζί με ένα μυστικό κλειδί στον πάροχο και λαμβάνει πίσω μια απάντηση – επιτυχία ή αποτυχία, και για το reCAPTCHA v3 επίσης μια βαθμολογία. Αν λείπει οποιοσδήποτε κρίκος αυτής της αλυσίδας, το widget εξακολουθεί να φαίνεται απολύτως φυσιολογικό, αλλά ένα bot που στέλνει απευθείας στον χειριστή της φόρμας σας περνά χωρίς εμπόδιο.
Το δοκιμαστικό κλειδί που αφήνει τα πάντα να περάσουν
Η Google, η hCaptcha και η Cloudflare δημοσιεύουν ειδικά δοκιμαστικά κλειδιά, ώστε οι προγραμματιστές να μπορούν να εκτελούν αυτοματοποιημένες δοκιμές χωρίς να λύνουν γρίφους. Με το αντίστοιχο δοκιμαστικό μυστικό, η επαλήθευση πετυχαίνει πάντα – αυτός είναι όλος ο σκοπός τους. Προορίζονται για τοπικά περιβάλλοντα και περιβάλλοντα staging, αλλά συχνά επιβιώνουν από τη μετάβαση στην παραγωγή: ένας προγραμματιστής τα επικολλά κατά την κατασκευή, ο ιστότοπος τίθεται σε λειτουργία και κανείς δεν τα αντικαθιστά. Το reCAPTCHA τουλάχιστον εμφανίζει στο widget μια ειδοποίηση ότι προορίζεται μόνο για δοκιμές, αλλά σε αόρατη ρύθμιση σχεδόν κανείς δεν κοιτάζει. Αν είναι ενεργά τόσο το δοκιμαστικό site key όσο και το δοκιμαστικό μυστικό, κάθε υποβολή περνά, είτε προέρχεται από άνθρωπο είτε από bot· αν μόνο το site key είναι δοκιμαστικό, η επαλήθευση αντίθετα αποτυγχάνει και ενδέχεται να απορρίπτονται πραγματικά μηνύματα.
Ένα token που δεν ελέγχει κανείς
Το δεύτερο κλασικό είναι ένας διακομιστής που δεν ρωτά ποτέ τον πάροχο. Το widget εκτελείται, δημιουργείται και υποβάλλεται ένα token, και στη συνέχεια ο χειριστής της φόρμας απλώς το αγνοεί. Τυπικές πηγές είναι οι χειροποίητες φόρμες, τα αντιγραμμένα αποσπάσματα κώδικα που καλύπτουν μόνο την πλευρά του προγράμματος περιήγησης και οι μισοτελειωμένες ρυθμίσεις πρόσθετων. Ένας στενός συγγενής: ο διακομιστής καλεί μεν την υπηρεσία επαλήθευσης, αλλά ελέγχει μόνο ότι το αίτημα ολοκληρώθηκε, όχι τι λέει η απάντηση. Ή το όριο βαθμολογίας για το reCAPTCHA v3 έχει οριστεί στο 0, οπότε γίνεται δεκτή κάθε βαθμολογία που μπορεί να επιστρέψει η υπηρεσία. Ορισμένοι χειριστές επίσης «αποτυγχάνουν ανοιχτοί»: αν το token λείπει ή η επαλήθευση αποτύχει, δέχονται το μήνυμα ούτως ή άλλως – και ένα bot απλώς παραλείπει το token.
Όταν το widget δεν φορτώνεται ποτέ πραγματικά
Άλλες λανθασμένες ρυθμίσεις χαλούν αντίθετα την πλευρά του προγράμματος περιήγησης. Αν το site key δεν είναι καταχωρισμένο για τον τομέα – τυπικό μετά από μετάβαση από staging σε παραγωγή, αλλαγή τομέα ή νέο υποτομέα – ο πάροχος αρνείται να εκδώσει tokens και εμφανίζει σφάλμα στο widget ή στην κονσόλα του προγράμματος περιήγησης. Μετά από αλλαγή θέματος ή ενημέρωση πρόσθετου, η σήμανση του widget μπορεί να παραμένει στη σελίδα ενώ το script που της δίνει ζωή έχει χαθεί. Ένα εργαλείο συγκατάθεσης cookies μπορεί να έχει το ίδιο αποτέλεσμα, αν μπλοκάρει το script του CAPTCHA μέχρι να συμφωνήσει ο επισκέπτης. Το τι συμβαίνει στη συνέχεια εξαρτάται από τον διακομιστή: αν επιμένει σε έγκυρο token, οι πραγματικοί επισκέπτες δεν μπορούν πλέον να στείλουν μηνύματα και κανείς δεν αντιλαμβάνεται τα χαμένα αιτήματα· αν όχι, τα bots περνούν ελεύθερα.
Δύο ακόμη περιπτώσεις περνούν εύκολα απαρατήρητες. Στο reCAPTCHA v3, το σήμα στη γωνία δείχνει μόνο ότι το script έχει φορτωθεί κάπου στη σελίδα – ίσως από το θέμα ή από άλλο πρόσθετο – ενώ η ενσωμάτωση στο ίδιο το πρόσθετο φορμών είναι απενεργοποιημένη. Επιπλέον, τα πρόσθετα προσωρινής αποθήκευσης μπορούν να αποθηκεύσουν μια σελίδα μαζί με ένα token ενσωματωμένο στο HTML. Τα tokens CAPTCHA ισχύουν μόνο για λίγα λεπτά και μπορούν να επαληθευτούν μόνο μία φορά, οπότε ένα αποθηκευμένο token αποτυγχάνει για τους πραγματικούς επισκέπτες· η δελεαστική «λύση» της απενεργοποίησης του ελέγχου αφαιρεί αθόρυβα την προστασία.
- Το widget εμφανίζει την ειδοποίηση «μόνο για σκοπούς δοκιμής»
- Το σήμα του v3 βρίσκεται στη γωνία
- Το widget αποδίδεται και επιστρέφει token
- Το spam σταμάτησε – αλλά και τα πραγματικά αιτήματα
- Χρησιμοποιούνται δημόσια δοκιμαστικά κλειδιά και κάθε επαλήθευση πετυχαίνει
- Η ενσωμάτωση reCAPTCHA του πρόσθετου φορμών είναι απενεργοποιημένη
- Ο διακομιστής δεν στέλνει ποτέ το token για επαλήθευση ή αγνοεί το αποτέλεσμα
- Το site key δεν είναι καταχωρισμένο για τον τομέα ή τα αποθηκευμένα tokens έληξαν
Ένας σύντομος αυτοέλεγχος
- 1Ανοίξτε τη σελίδα της φόρμας σε ιδιωτικό παράθυρο, ανοίξτε τα εργαλεία προγραμματιστή του προγράμματος περιήγησης και αναζητήστε στην κονσόλα σφάλματα από το script του CAPTCHA.
- 2Ελέγξτε ότι το widget εμφανίζεται πράγματι – μία φορά πριν και μία φορά μετά την αποδοχή του banner cookies – και ότι η φόρμα δεν μπορεί να σταλεί όσο λείπει.
- 3Στην κονσόλα διαχείρισης του παρόχου, ελέγξτε ότι το site key περιλαμβάνει τον ενεργό τομέα σας (μαζί με παραλλαγές όπως το www) και ότι τα κλειδιά στο πρόσθετο φορμών ή στον κώδικά σας ταιριάζουν με αυτό – όχι κλειδιά από την τεκμηρίωση ή από ρύθμιση staging.
- 4Στις ρυθμίσεις του πρόσθετου φορμών, βεβαιωθείτε ότι η ενσωμάτωση CAPTCHA είναι ενεργοποιημένη για τη συγκεκριμένη φόρμα· για το reCAPTCHA v3, ελέγξτε ότι το όριο βαθμολογίας είναι πάνω από 0.
- 5Αν έχετε πρόσβαση στον κώδικα, εντοπίστε την επαλήθευση στον διακομιστή και ελέγξτε ότι απορρίπτει την υποβολή όταν η απάντηση είναι αρνητική ή το token λείπει.
- 6Εξαιρέστε τη σελίδα της φόρμας από την προσωρινή αποθήκευση ολόκληρης της σελίδας ή βεβαιωθείτε ότι το token δημιουργείται εκ νέου στο πρόγραμμα περιήγησης.
- 7Στείλτε ένα πραγματικό δοκιμαστικό μήνυμα και ελέγξτε ότι φτάνει· επαναλάβετε τον έλεγχο μετά από αλλαγές στο θέμα, στα πρόσθετα ή στο εργαλείο συγκατάθεσης.
Ένα CAPTCHA είναι ένα επίπεδο, όχι ολόκληρη η προστασία. Σε συνδυασμό με ένα πεδίο honeypot, έναν έλεγχο χρόνου και φιλτράρισμα στον διακομιστή, μια λανθασμένη ρύθμιση σε ένα σημείο δεν αφήνει τη φόρμα ορθάνοιχτη. Αν θέλετε μια γρήγορη εικόνα του πού βρίσκονται οι φόρμες σας, εισαγάγετε τον τομέα σας στο formexposed.com – η αναφορά δείχνει αν τα μέρη της ρύθμισης CAPTCHA που είναι ορατά από έξω είναι εντάξει.