Проверка робота (бота для заполнения форм) без CAPTCHA: isTrusted vs захват HTML

#javascript #forms #captcha

#javascript #формы #captcha

Вопрос:

У меня есть сомнения по поводу использования isTrusted, и я хотел бы поделиться ими. Как я могу отрицать, что серверный скрипт захватывает мой исходный код HTML и выполняет HTTP-вызов POST для моего URL-адреса действия? Таким образом, свойство isTrusted может быть легко передано. К сожалению, я не могу использовать CAPTCHA или reCAPTCHA.

У меня есть действительно примерная форма, подобная этой:

 <form id="mod" action="otherPage.php" onsubmit="return false;">
<input type="text" name="yourName">
<input type="hidden" name="noCSRF" value="eweifwo23-423dad13123.ljk9879">
<input type="submit" id="sender">
</form>
  

И простой скрипт, подобный этому:

 document.getElementById("mod").submit=function(){ return false; };

document.getElementById("sender").addEventListener("click", function (event) {

    var replicant=true;

    if ("isTrusted" in event)
    {
        if (event.isTrusted)
        {
            replicant=false;
        }
        
        if (!replicant) 
        {
            alert("you are a human");
            //XMLHttpRequest to action URL
        }
        else 
        {
            alert("YOU ARE A REPLICANT!!");
        }
    }
    else
    {
        alert("nothing to do!");
    }
});
  

Ответ №1:

Если автоматическая программа ведет себя как человек с браузером, вы не можете.

Вы зависите от отслеживания различий между людьми и роботами. CAPTCHA (которую вы отклонили) — это обычная и низкая попытка (в любом случае, с вашей стороны) обнаружить это отличие. Роботы очень плохо заполняют капчи.

Другие подходы включают тестирование таких вещей, как частота запросов (роботы могут быть более частыми или иметь более согласованные интервалы между запросами) из источника, сходство запросов (роботы могут отправлять одно и то же спам-сообщение в несколько мест на веб-сайте) и так далее.

В вашем примере кода используется JS на стороне клиента, но это можно легко обойти. Для этого вам нужно тестирование на стороне сервера.

Комментарии:

1. Хорошо, я понял. Спасибо.