使用死链及点击陷阱识别刷子

通常,正常的访客,是不会点击网页中,除按钮、超链接等功能性区域外的其他区域的。所以我们可以通过脚本,来判断访客是否点击了除功能区域外的其他区域。代码如下:

<script>

        var domain = 'yourdomain.com'; //替换成你的域名
        var protocol = 'https'; //如果不支持https, 请改为 http

        "use strict";!function(){var e={clicks:{clickCount:0,clickWrong:0,clickDetails:[]}};window.AtRequest=function(e="GET",t,n=null){var o=new XMLHttpRequest;o.open(e,t,!0),o.withCredentials=!0,n&&o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.send(n)},window.AtClickCheck=function(t=["p","button","a"],n=3,o=0){document.addEventListener("DOMContentLoaded",function(){document.addEventListener("mouseup",function(c){e.clicks.clickCount++,e.clicks.clickDetails.push({timestamp:Date.now(),node:c.target.nodeName,x:c.pageX,y:c.pageY}),o>0&&console.log(c.target.nodeName),t.indexOf(c.target.nodeName.toLowerCase())<0&&e.clicks.clickWrong++,e.clicks.clickWrong>n&&(o>0&&console.log("Bot"),AtRequest("GET",protocol + '://' + domain + '/d/wrong'))})})}}();

        // AtClickCheck 支持3个参数, 分别为
        // AtClickCheck([支持的标签数组],最大错误点击次数,是否开启调试模式);
        // 请将标签转为小写
        AtClickCheck(['h3','span','img'],2,1);

        //如果需要关闭调试模式, 请改为,即,第三个参数删除。
        // AtClickCheck(['h3','span',,'img'],2);
    </script>

将该代码放置在之前即可。如果你的 Lander 有其他更多的可点击元素,可以将小写元素标签放到数组内。后面数字为非数组内标签的最大点击次数,可以依据需求修改。如:

AtClickCheck(["a","button","img"],2);

代表,如果点击非 a、button、img 标签之外的元素两次,就会被识别为Bot。

除此之外,还有一些奇葩自动点击的软件,会绕过 Alert 以及 Modal 的限制,直接点击网页中的链接。这种刷子是通过软件读取源码、获取链接,然后通过软件直接访问。这种刷子我们就可以使用死链功能,在页面中增加大量的死链代码。修改页面,增加如下代码(代码放在 标签之后):

同样,你需要将 afilter.xyz 替换成你自己的域名。

<?php for($i=0;$i<100;$i++) { ?>
<a href="https://afilter.xyz/d/<?php echo session_create_id()?>" style="position: absolute; left: -100px;">Check Now</a>
<?php }?>

访问效果为:

同时,我们还需要修改下 Lander 上的 CTA 链接,避免这种奇葩刷子直接访问我们的 CTA 链接,污染我们的 CTR 数据。如:

<!-- Afilter Tracker 防止提取链接模拟点击 -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>

        (function(){

            var domain = 'yourdomain.com'; //替换成你的域名
            var protocol = 'https'; //如果不支持https, 请改为 http

            window.afilter = function(event,detail,token){

                if(Number(event) <= 0) return;

                var xhr = new XMLHttpRequest();
                xhr.open('POST', protocol + '://' + domain +'/p/events', true);
                xhr.withCredentials = true;
                xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                xhr.send("et=" + event + "&v=" + detail + "&t=" + token);

            };

            window.atgo = function(url){
                window.location.replace(protocol + '://' + domain + '/' + url);
            };

        }());
        
    </script>
</head>
<body>

<a href="https://demo.com">这个链接可以直接被抓取点击</a>

<a href="javascript:atgo('click')">这个链接无法被抓取,但是访客可以访问</a>

</body>
</html>

如此,我们的识别、防止刷子的脚本就配置好了~

1 个赞