SilentShield 2.6 zamyka lukę, która kosztowała jeden sklep rejestracje w kasie: formularze wysyłane kliknięciem przycisku i przez AJAX zamiast zwykłego submit nie były do nas zgłaszane. Ten artykuł wyjaśnia, co się stało, co się zmienia i co należy zrobić. Pełna lista znajduje się w changelogu.
Co poszło nie tak
Widżet mierzy pisanie i ruchy myszy i zgłasza wynik, gdy odwiedzający wysyła formularz. Nasłuchiwał zdarzenia submit przeglądarki. Niektóre sklepy nigdy nie wywołują tego zdarzenia. Kasa OpenCart 3 ładuje na przykład krok rejestracji przez AJAX i wysyła go zwykłym przyciskiem oraz jQuery.ajax.
Skutek: Państwa serwer pytał /v1/verify o odwiedzającego, dla którego otrzymaliśmy tylko pierwsze zdarzenie strony. Bez danych o pisaniu i ruchach myszy werdykt brzmiał „suspicious”, a rejestracja prawdziwej osoby kończyła się błędem. Formularz był chroniony, ale ochrona nie widziała odwiedzającego.
Co się zmienia
W wersji 2.6 widżet rozpoznaje także tego rodzaju wysłanie. Sprawdza żądanie, które zawiera behavior_nonce. Jeśli takie żądanie opuszcza stronę bez zdarzenia submit, a formularz nie został jeszcze sprawdzony, widżet wstrzymuje je na chwilę, zgłasza wysłanie wraz ze zebranymi danymi o pisaniu i ruchach myszy i wysyła żądanie dopiero po otrzymaniu werdyktu. Jeśli odpowiedź nie nadejdzie w ciągu 15 sekund, żądanie i tak zostaje wysłane, a decyzję podejmuje Państwa serwer, jak dotychczas.
Wszystko inne pozostaje bez zmian: formularze ze zwykłym submit, żądania bez nonce i zwykłe wysłania strony nie są dotykane.
Jak to przetestowaliśmy
Odtworzyliśmy kasę OpenCart w naszym lokalnym środowisku testowym z prawdziwym jQuery i pozwoliliśmy symulowanemu serwerowi klienta wywołać /v1/verify. Przy wyłączonym przełączniku formularz wysyłany kliknięciem i przez AJAX był odrzucany (HTTP 403, „suspicious”, powody NO_TYPING_PAUSES i NO_MOUSE_MOVEMENT). Przy włączonym przełączniku ten sam odwiedzający został zaakceptowany (HTTP 200, „human”). Formularz ze zwykłym submit, zwykłe wysłanie strony i żądanie bez nonce zachowywały się tak samo przy włączonym i wyłączonym przełączniku.
Co warto wiedzieć
- Obejmuje żądania wykonywane przez
XMLHttpRequest, w tymjQuery.ajax. Formularze wysyłane przezfetch()nie są jeszcze objęte, z wyjątkiem kasy blokowej WooCommerce, która ma własną obsługę. - Państwa kontrola po stronie serwera się nie zmienia. Proszę nadal wywoływać
/v1/verifyz nonce.