SilentShield 2.6 затваря пропуск, който струваше на един магазин регистрациите при плащане: формулярите, изпратени с клик върху бутон и AJAX вместо с обикновено изпращане, не ни се отчитаха. Тази статия обяснява какво се случи, какво се променя и какво трябва да направите. Пълният списък е в списъка с промените.
Какво се обърка
Уиджетът измерва писането и движението на мишката и отчита резултата, когато посетител изпраща формуляр. За целта слушаше събитието submit на браузъра. Някои магазини никога не задействат това събитие. Плащането в OpenCart 3 например зарежда стъпката за регистрация чрез AJAX и я изпраща с обикновен бутон и jQuery.ajax.
Резултатът: вашият сървър питаше /v1/verify за посетител, за когото бяхме получили само първото събитие на страницата. Без данни за писането и мишката решението беше „suspicious“ и регистрацията се провали за истински човек. Формулярът беше защитен, но защитата не можеше да види посетителя.
Какво се променя
С версия 2.6 уиджетът разпознава и този вид изпращане. Той следи заявката, която носи behavior_nonce. Ако тази заявка напуска страницата без събитие submit и формулярът още не е проверен, уиджетът я задържа за момент, отчита изпращането със събраните данни за писането и мишката и изпраща заявката, щом решението е налице. Ако в рамките на 15 секунди не дойде отговор, заявката все пак се изпраща и вашият сървър решава, както досега.
Всичко останало си остава както преди: формулярите с обикновено изпращане, заявките без nonce и простите изпращания на страница не се засягат.
Как го тествахме
Пресъздадохме плащането в OpenCart в нашата локална тестова среда с истински jQuery и оставихме симулиран сървър на клиент да извика /v1/verify. При изключен превключвател формулярът с клик и AJAX беше отхвърлен (HTTP 403, „suspicious“, причини NO_TYPING_PAUSES и NO_MOUSE_MOVEMENT). При включен превключвател същият посетител беше приет (HTTP 200, „human“). Формуляр с обикновено изпращане, просто изпращане на страница и заявка без nonce се държаха еднакво при включен и изключен превключвател.
Какво е добре да знаете
- Той обхваща заявки, направени с
XMLHttpRequest, което включваjQuery.ajax. Формуляри, изпратени сfetch(), засега не са обхванати, освен блоковото плащане на WooCommerce, което има собствена обработка. - Вашата проверка на сървъра не се променя. Продължавайте да извиквате
/v1/verifyс nonce.