SilentShield 2.6 zapira vrzel, ki je eno trgovino stala registracije v blagajni: obrazci, oddani s klikom na gumb in prek AJAX-a namesto z navadnim submit, nam niso bili sporočeni. Ta članek pojasnjuje, kaj se je zgodilo, kaj se spreminja in kaj morate storiti. Celoten seznam je v changelogu.
Kaj je šlo narobe
Widget meri tipkanje in premike miške ter sporoči rezultat, ko obiskovalec odda obrazec. Poslušal je dogodek submit brskalnika. Nekatere trgovine tega dogodka nikoli ne sprožijo. Blagajna OpenCart 3 na primer korak registracije naloži prek AJAX-a in ga pošlje z navadnim gumbom ter jQuery.ajax.
Rezultat: vaš strežnik je spraševal /v1/verify o obiskovalcu, o katerem smo prejeli le prvi dogodek strani. Brez podatkov o tipkanju in miški je bila presoja „suspicious“, registracija pa je za pravo osebo spodletela. Obrazec je bil zaščiten, vendar zaščita obiskovalca ni videla.
Kaj se spreminja
Z različico 2.6 widget prepozna tudi to vrsto oddaje. Opazuje zahtevo, ki nosi behavior_nonce. Če ta zahteva zapusti stran brez dogodka submit in obrazec še ni bil preverjen, jo widget za trenutek zadrži, sporoči oddajo skupaj z zbranimi podatki o tipkanju in miški ter zahtevo pošlje, ko prispe presoja. Če odgovor ne pride v 15 sekundah, se zahteva vseeno pošlje, odloči pa vaš strežnik, kot doslej.
Vse drugo ostaja, kot je bilo: obrazci z navadnim submit, zahteve brez nonce in preproste oddaje strani se ne spreminjajo.
Kako smo preizkusili
Blagajno OpenCart smo ponovno zgradili v svojem lokalnem testnem okolju z resničnim jQuery in simuliranemu strežniku stranke dovolili klicati /v1/verify. Z izklopljenim stikalom je bil obrazec, oddan s klikom in prek AJAX-a, zavrnjen (HTTP 403, „suspicious“, razloga NO_TYPING_PAUSES in NO_MOUSE_MOVEMENT). Z vklopljenim stikalom je bil isti obiskovalec sprejet (HTTP 200, „human“). Obrazec z navadnim submit, preprosta oddaja strani in zahteva brez nonce so se z vklopljenim in izklopljenim stikalom obnašali enako.
Kaj je dobro vedeti
- Zajema zahteve, izvedene z
XMLHttpRequest, kar vključujejQuery.ajax. Obrazci, poslani sfetch(), še niso zajeti, razen blokovne blagajne WooCommerce, ki ima lastno obravnavo. - Vaše preverjanje na strežniku se ne spremeni. Še naprej kličite
/v1/verifyz nonce.