Επαλήθευση στον διακομιστή
Πάντα να επαληθεύετε το SilentShield nonce στον διακομιστή σας. Οι έλεγχοι μόνο στην πλευρά του πελάτη μπορούν να παρακαμφθούν από bots.
Γιατί στον διακομιστή;
Το Widget εκτελείται στο πρόγραμμα περιήγησης και εισάγει ένα nonce στις φόρμες. Ένα bot μπορεί να παρακάμψει το Widget και να υποβάλει τη φόρμα απευθείας. Η επαλήθευση στον διακομιστή διασφαλίζει ότι το nonce εκδόθηκε νόμιμα και επαληθεύτηκε από το SilentShield.
Τελικό σημείο API
- Method
POST- URL
https://api.silentshield.io/api/v1/captcha/verify-nonce- Headers
- X-Api-Key: YOUR_API_KEY Content-Type: application/json
- Body
- { "nonce": "the-nonce-from-the-form" }
Μορφή απάντησης
{
"ok": true,
"verdict": "human",
"confidence": 0.92,
"requested_nonce": "..."
}human- human — Ο χρήστης είναι πολύ πιθανό άνθρωπος. Επεξεργαστείτε τη φόρμα.
suspicious- suspicious — ο διακομιστής την απέρριψε (HTTP 403, `ok: false`). Η ετυμηγορία αναφέρει τον λόγο, όχι την απόφαση: αυτή έχει ήδη ληφθεί από το κατώφλι του λογαριασμού σας.
bot- bot — Υψηλή βεβαιότητα ότι πρόκειται για bot. Απορρίψτε τη φόρμα.
Συνιστώμενη λογική
Ο διακομιστής έχει ήδη εφαρμόσει το κατώφλι του λογαριασμού σας: μια απόρριψη φτάνει ως HTTP 403 με `ok: false`. Ελέγχετε λοιπόν για έγκριση, όχι για `bot` — αλλιώς αφήνετε να περάσει κάθε απόρριψη που εκδόθηκε ως `suspicious`, καθώς και κάθε απάντηση χωρίς ετυμηγορία (άκυρο κλειδί, εξαντλημένο όριο).
if not ok or verdict != "human":
απόρριψη της φόρμας (403)
else:
κανονική επεξεργασία της φόρμαςΦόρμες που στέλνονται με AJAX
Το widget αναφέρει μια υποβολή όταν η φόρμα στέλνεται με κανονική υποβολή. Αναφέρει επίσης αιτήματα που γίνονται με XMLHttpRequest, συμπεριλαμβανομένου του jQuery.ajax, εφόσον το σώμα του αιτήματος περιέχει το πεδίο behavior_nonce: κρατά το αίτημα για λίγο, αναφέρει τα δεδομένα πληκτρολόγησης και ποντικιού και στέλνει το αίτημα μόλις υπάρξει απόφαση, το αργότερο μετά από 15 δευτερόλεπτα. Σειριοποιήστε λοιπόν ολόκληρη τη φόρμα, μαζί με τα κρυφά πεδία. Ο έλεγχός σας στον διακομιστή δεν αλλάζει.
Δεν καλύπτονται: αιτήματα που γίνονται με fetch() και σύγχρονα αιτήματα. Γι’ αυτά ο διακομιστής δεν λαμβάνει δεδομένα πληκτρολόγησης και ποντικιού και το /v1/verify απαντά suspicious.
Διαχείριση σφαλμάτων
Εάν το API του SilentShield δεν είναι προσβάσιμο (timeout, σφάλμα 5xx), αποφασίστε τη στρατηγική σας:
- Fail Open
- Fail open — Αποδεχτείτε τη φόρμα (καλύτερη εμπειρία χρήστη, λιγότερο ασφαλές)
- Fail Closed
- Fail closed — Απορρίψτε τη φόρμα (πιο ασφαλές, χειρότερη εμπειρία χρήστη)
Για τις περισσότερες εφαρμογές, συνιστούμε fail open με καταγραφή. Κρίσιμες φόρμες (σύνδεση, πληρωμή) θα πρέπει να χρησιμοποιούν fail closed.