【问题标题】:Robot verification (form filling bot) without CAPTCHA: isTrusted vs HTML grabbing没有 CAPTCHA 的机器人验证(表单填写机器人):isTrusted 与 HTML 抓取
【发布时间】:2021-01-26 20:28:24
【问题描述】:

我对 isTrusted 的使用有疑问,我想分享一下。如何拒绝服务器端脚本抓取我的 HTML 源代码并对我的操作 URL 进行 POST HTTP 调用?通过这种方式,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!");
    }
});

【问题讨论】:

    标签: javascript forms captcha


    【解决方案1】:

    如果一个自动化程序在浏览器中表现得像人类一样你不能

    您依赖于跟踪人类和机器人之间的差异。验证码(您已拒绝)是一种常见且不费吹灰之力的方法(无论如何都在您的身边)来检测这种差异。机器人很不擅长填写验证码。

    其他方法包括测试来自来源的请求频率(机器人可能更频繁或请求之间的间隔更一致)、请求的相似性(机器人可能将相同的垃圾邮件发布到网站上的多个位置)和以此类推。

    您的代码示例使用客户端 JS,但可以轻松绕过。您需要对此进行服务器端测试。

    【讨论】:

    • 好的,我知道了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 2020-09-18
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    相关资源
    最近更新 更多