A SilentShield 2.6 lezár egy hiányosságot, amely egy webshopnak a pénztári regisztrációkba került: azokat az űrlapokat, amelyeket rendes submit helyett gombkattintással és AJAX-szal küldenek, nem jelentették nekünk. Ez a cikk elmagyarázza, mi történt, mi változik, és mit kell tennie. A teljes lista a changelogban olvasható.
Mi romlott el
A widget méri a gépelést és az egérmozgást, és az eredményt akkor jelenti, amikor a látogató elküld egy űrlapot. A böngésző submit eseményét figyelte. Egyes webshopok ezt az eseményt soha nem váltják ki. Az OpenCart 3 pénztára például AJAX-szal tölti be a regisztrációs lépést, és egyszerű gombbal és jQuery.ajax-szal küldi el.
Az eredmény: a szerver a /v1/verify végponton olyan látogatóról kérdezett, akiről csak az első oldalesemény érkezett meg hozzánk. Gépelési és egéradatok nélkül a döntés „suspicious” volt, és a regisztráció egy valódi embernél meghiúsult. Az űrlap védett volt, de a védelem nem látta a látogatót.
Mi változik
A 2.6-os verzióval a widget az ilyen beküldést is felismeri. A behavior_nonce-ot hordozó kérést vizsgálja. Ha ez a kérés submit esemény nélkül hagyja el az oldalt, és az űrlapot még nem ellenőrizték, a widget egy pillanatra visszatartja, jelenti a beküldést az összegyűjtött gépelési és egéradatokkal, majd a döntés megérkezése után elküldi a kérést. Ha 15 másodpercen belül nem érkezik válasz, a kérés mégis elmegy, és a szerver dönt, mint korábban.
Minden más változatlan marad: a rendes submittal küldött űrlapokhoz, a nonce nélküli kérésekhez és az egyszerű oldalbeküldésekhez nem nyúlunk.
Hogyan teszteltük
Az OpenCart pénztárat a helyi tesztkörnyezetünkben valódi jQuery-vel újraépítettük, és egy szimulált ügyfélszerverrel hívattuk a /v1/verify végpontot. Kikapcsolt kapcsolóval a kattintással és AJAX-szal küldött űrlapot elutasították (HTTP 403, „suspicious”, okok: NO_TYPING_PAUSES és NO_MOUSE_MOVEMENT). Bekapcsolt kapcsolóval ugyanezt a látogatót elfogadták (HTTP 200, „human”). A rendes submittal küldött űrlap, az egyszerű oldalbeküldés és a nonce nélküli kérés ugyanúgy viselkedett be- és kikapcsolt kapcsolóval.
Tudnivalók
- Az
XMLHttpRequest-tel indított kéréseket fedi le, ide tartozik ajQuery.ajaxis. Afetch()-csel küldött űrlapokat még nem, kivéve a WooCommerce blokkos pénztárát, amelynek saját kezelése van. - A szerveroldali ellenőrzése nem változik. Továbbra is a nonce-szal hívja a
/v1/verifyvégpontot.