SilentShield 2.6 zatvara prazninu zbog koje je jedna trgovina izgubila registracije na blagajni: obrasci koji se umjesto običnog submita šalju klikom na gumb i AJAX-om nisu nam bili prijavljeni. Ovaj članak objašnjava što se dogodilo, što se mijenja i što trebate učiniti. Cjeloviti popis nalazi se u changelogu.
Što je pošlo po zlu
Widget mjeri tipkanje i pomicanje miša te prijavljuje rezultat kad posjetitelj pošalje obrazac. Slušao je preglednikov događaj submit. Neke trgovine taj događaj nikada ne pokreću. Blagajna OpenCarta 3, na primjer, učitava korak registracije AJAX-om i šalje ga običnim gumbom i jQuery.ajax.
Rezultat: vaš je poslužitelj preko /v1/verify pitao o posjetitelju za kojeg smo primili samo prvi događaj stranice. Bez podataka o tipkanju i mišu presuda je bila „suspicious”, a registracija nije uspjela stvarnoj osobi. Obrazac je bio zaštićen, ali zaštita nije vidjela posjetitelja.
Što se mijenja
Od verzije 2.6 widget prepoznaje i takvo slanje. Promatra zahtjev koji nosi behavior_nonce. Ako taj zahtjev napusti stranicu bez događaja submit, a obrazac još nije provjeren, widget ga na trenutak zadrži, prijavi slanje s prikupljenim podacima o tipkanju i mišu te pošalje zahtjev kad stigne presuda. Ako odgovor ne stigne u 15 sekundi, zahtjev se ipak šalje, a vaš poslužitelj odlučuje kao i prije.
Sve ostalo ostaje kako je bilo: obrasci s običnim submitom, zahtjevi bez noncea i obična slanja stranice ne diraju se.
Kako smo to testirali
Blagajnu OpenCarta ponovno smo izgradili u lokalnom testnom okruženju sa stvarnim jQueryjem i pustili simulirani klijentski poslužitelj da poziva /v1/verify. Kad je prekidač bio isključen, obrazac poslan klikom i AJAX-om bio je odbijen (HTTP 403, „suspicious”, razlozi NO_TYPING_PAUSES i NO_MOUSE_MOVEMENT). Kad je prekidač bio uključen, isti je posjetitelj prihvaćen (HTTP 200, „human”). Obrazac s običnim submitom, obično slanje stranice i zahtjev bez noncea ponašali su se jednako s uključenim i isključenim prekidačem.
Što je dobro znati
- Obuhvaća zahtjeve izvršene s
XMLHttpRequest, što uključujejQuery.ajax. Obrasci poslani sfetch()još nisu obuhvaćeni, osim WooCommerce blokovne blagajne, koja ima vlastitu obradu. - Vaša provjera na strani poslužitelja ne mijenja se. I dalje pozivajte
/v1/verifys nonceom.