SilentShield 2.6 închide o lacună care a costat un magazin înregistrările din checkout: formularele trimise printr-un clic pe buton și prin AJAX în loc de un submit obișnuit nu ne erau raportate. Acest articol explică ce s-a întâmplat, ce se schimbă și ce aveți de făcut. Lista completă se găsește în jurnalul de modificări.
Ce a mers prost
Widgetul măsoară tastarea și mișcarea mouse-ului și raportează rezultatul când un vizitator trimite un formular. Asculta evenimentul submit al browserului. Unele magazine nu declanșează niciodată acest eveniment. Checkout-ul OpenCart 3, de exemplu, încarcă pasul de înregistrare prin AJAX și îl trimite cu un simplu buton și jQuery.ajax.
Rezultatul: serverul dvs. interoga /v1/verify despre un vizitator pentru care primiserăm doar primul eveniment de pagină. Fără date despre tastare și mouse, verdictul era „suspicious”, iar înregistrarea eșua pentru o persoană reală. Formularul era protejat, dar protecția nu putea vedea vizitatorul.
Ce se schimbă
Începând cu versiunea 2.6, widgetul recunoaște și acest tip de trimitere. Urmărește solicitarea care conține behavior_nonce. Dacă această solicitare părăsește pagina fără un eveniment submit, iar formularul nu a fost încă verificat, widgetul o reține pentru scurt timp, raportează trimiterea împreună cu datele colectate despre tastare și mouse și trimite solicitarea abia după ce sosește verdictul. Dacă nu vine niciun răspuns în 15 secunde, solicitarea este trimisă oricum, iar serverul dvs. decide, ca până acum.
Restul rămâne neschimbat: formularele cu submit obișnuit, solicitările fără nonce și trimiterile simple de pagină nu sunt atinse.
Cum am testat
Am reconstruit checkout-ul OpenCart în mediul nostru local de testare, cu jQuery real, și am lăsat un server de client simulat să apeleze /v1/verify. Cu comutatorul oprit, formularul trimis printr-un clic și AJAX a fost respins (HTTP 403, „suspicious”, motivele NO_TYPING_PAUSES și NO_MOUSE_MOVEMENT). Cu comutatorul pornit, același vizitator a fost acceptat (HTTP 200, „human”). Un formular cu submit obișnuit, o trimitere simplă de pagină și o solicitare fără nonce s-au comportat la fel cu comutatorul pornit și oprit.
Ce este bine de știut
- Acoperă solicitările făcute cu
XMLHttpRequest, inclusivjQuery.ajax. Formularele trimise cufetch()nu sunt încă acoperite, cu excepția checkout-ului pe blocuri WooCommerce, care are o tratare proprie. - Verificarea dvs. de pe server nu se schimbă. Continuați să apelați
/v1/verifycu nonce.