SilentShield 2.6 dicht een hiaat dat een webshop registraties in de checkout kostte: formulieren die met een klik op een knop en AJAX worden verzonden in plaats van met een gewone submit, werden niet aan ons gemeld. Dit artikel legt uit wat er gebeurde, wat er verandert en wat u moet doen. De volledige lijst staat in de changelog.
Wat er misging
De widget meet typen en muisbewegingen en meldt het resultaat wanneer een bezoeker een formulier verzendt. Hij luisterde naar de submit-gebeurtenis van de browser. Sommige webshops activeren die gebeurtenis nooit. De OpenCart 3-checkout laadt de registratiestap bijvoorbeeld via AJAX en verzendt die met een gewone knop en jQuery.ajax.
Het gevolg: uw server vroeg via /v1/verify naar een bezoeker waarvan wij alleen de eerste paginagebeurtenis hadden ontvangen. Zonder typ- en muisgegevens was het oordeel „verdacht”, en de registratie mislukte voor een echt persoon. Het formulier was beschermd, maar de bescherming kon de bezoeker niet zien.
Wat er verandert
Met versie 2.6 herkent de widget ook dit soort verzendingen. Hij kijkt naar het verzoek dat de behavior_nonce meedraagt. Verlaat dat verzoek de pagina zonder submit-gebeurtenis en is het formulier nog niet gecontroleerd, dan houdt de widget het even vast, meldt de verzending met de verzamelde typ- en muisgegevens en verstuurt het verzoek zodra het oordeel binnen is. Komt er binnen 15 seconden geen antwoord, dan wordt het verzoek toch verzonden en beslist uw server, zoals voorheen.
Alles andere blijft zoals het was: formulieren met een gewone submit, verzoeken zonder nonce en eenvoudige pagina-posts worden niet aangeraakt.
Hoe wij het hebben getest
We hebben de OpenCart-checkout in onze lokale testomgeving nagebouwd met echte jQuery en een gesimuleerde klantserver /v1/verify laten aanroepen. Met de schakelaar uit werd het formulier dat met een klik en AJAX werd verzonden geweigerd (HTTP 403, „verdacht”, redenen NO_TYPING_PAUSES en NO_MOUSE_MOVEMENT). Met de schakelaar aan werd dezelfde bezoeker geaccepteerd (HTTP 200, „mens”). Een formulier met een gewone submit, een eenvoudige pagina-post en een verzoek zonder nonce gedroegen zich met de schakelaar aan en uit hetzelfde.
Goed om te weten
- Hij dekt verzoeken met
XMLHttpRequest, waaronderjQuery.ajax. Formulieren die metfetch()worden verzonden zijn nog niet gedekt, behalve de WooCommerce-blokcheckout, die een eigen afhandeling heeft. - Uw controle aan de serverzijde verandert niet. Blijf
/v1/verifyaanroepen met de nonce.