SilentShield 2.6 uzatvára medzeru, ktorá jeden obchod stála registrácie v pokladni: formuláre odoslané kliknutím na tlačidlo a cez AJAX namiesto bežného submit sa nám nehlásili. Tento článok vysvetľuje, čo sa stalo, čo sa mení a čo musíte urobiť. Úplný zoznam nájdete v changelogu.
Čo sa pokazilo
Widget meria písanie a pohyb myši a výsledok hlási, keď návštevník odošle formulár. Počúval udalosť submit prehliadača. Niektoré obchody túto udalosť nikdy nespustia. Pokladňa OpenCart 3 napríklad načíta krok registrácie cez AJAX a odošle ho obyčajným tlačidlom a jQuery.ajax.
Výsledok: váš server sa pýtal /v1/verify na návštevníka, o ktorom sme dostali iba prvú udalosť stránky. Bez údajov o písaní a pohybe myši znel verdikt „suspicious“ a registrácia skutočnej osoby zlyhala. Formulár bol chránený, ale ochrana návštevníka nevidela.
Čo sa mení
S verziou 2.6 widget rozpoznáva aj tento druh odoslania. Sleduje požiadavku, ktorá nesie behavior_nonce. Ak táto požiadavka opúšťa stránku bez udalosti submit a formulár ešte nebol skontrolovaný, widget ju na chvíľu pozdrží, nahlási odoslanie so zozbieranými údajmi o písaní a pohybe myši a požiadavku odošle až po doručení verdiktu. Ak do 15 sekúnd nepríde žiadna odpoveď, požiadavka sa odošle aj tak a váš server rozhodne ako doteraz.
Všetko ostatné zostáva ako predtým: formuláre s bežným submit, požiadavky bez nonce a jednoduché odoslania stránky sa nemenia.
Ako sme to testovali
Pokladňu OpenCart sme znovu vytvorili v našom lokálnom testovacom prostredí so skutočným jQuery a simulovaný zákaznícky server sme nechali volať /v1/verify. Pri vypnutom prepínači bol formulár odoslaný kliknutím a cez AJAX odmietnutý (HTTP 403, „suspicious“, dôvody NO_TYPING_PAUSES a NO_MOUSE_MOVEMENT). Pri zapnutom prepínači bol ten istý návštevník prijatý (HTTP 200, „human“). Formulár s bežným submit, jednoduché odoslanie stránky a požiadavka bez nonce sa správali rovnako so zapnutým aj vypnutým prepínačom.
Čo je dobré vedieť
- Pokrýva požiadavky vykonané cez
XMLHttpRequest, teda ajjQuery.ajax. Formuláre odosielané cezfetch()zatiaľ pokryté nie sú, okrem blokovej pokladne WooCommerce, ktorá má vlastné spracovanie. - Vaša kontrola na strane servera sa nemení. Naďalej volajte
/v1/verifys nonce.