在创建个人的小网站时,我们也需要警惕恶意流量,并采取相应的防范措施。一个方法是确保我们的服务端API接口不被爬虫滥用,以免造成损失。
举个例子,假设一个新网站的流量突然从之前的100增加到4千多。仔细查看流量来源,发现排名第一的网站带来了4千多次访问,明显是恶意行为。同时,我们注意到服务端API接口的成本也大幅增加,因为每次调用接口都会产生一定的成本。于是,我们紧急采取措施加强网站的防护。
基础防护措施
实际上,最佳的方式是提前采取基础的防护措施。在这个过程中,我积累了一些经验,这些方法都是免费的,但却能极大地增强网站的防护能力。
首先,我们需要有监控手段。例如,对于我所使用的服务端API,每次调用都会扣减一定的底层平台额度。因此,当出现异常情况时,我们能够及时发现并进行止损。具体的止损措施可以是临时关闭API,进行系统维护。
其次,我使用的是Django框架作为服务端,它可以在每次提供前端网页时,在页面中添加一个csrf_token参数。然后,在前端发起服务端请求时,将该csrf_token传递给服务端。服务端会默认进行校验,如果校验未通过,则直接报错。这种方式可以增加爬虫的难度,至少能够阻挡一些简单的爬虫。当然,稍具耐心的爬虫工程师仍然可以通过获取页面上的csrf_token并伪造请求来绕过该防护措施。因此,我们还需要更多的保护措施。
说实话,阿里云的一些服务价格较高,但其中防火墙提供了免费版,这总比没有要好。我们可以首先搜索“Web应用防火墙”产品,并购买免费版套餐。接下来,在“接入管理”中将我们的域名添加到“CNAME”中,并在“云产品接入”中添加我们的服务器实例。一旦添加完成,系统的默认规则就会开始生效,我们基本不需要手动配置防护规则。
cloudflare人机验证
然而,即使防火墙可以拦截一些恶意流量,我们的服务端API仍然容易受到爬虫的攻击。因此,我们需要一种保护服务端API的方法,即人机验证。
在探索人机验证方案时,我经历了一番折腾。首先,我阅读了阿里云的人机验证文档,发现它确实有效,但价格偏高。然后,我按照文档逐步接入了我的网页。然而,我发现了两个问题:一是每次验证都要绘制曲线,操作繁琐不太友好;二是遇到了验证无法通过的情况,不够稳定。
于是,我尝试搜索了一下Cloudflare反爬虫的人机验证,惊喜地发现它提供了免费的人机验证服务,而且在国内打开速度也相对较快,这非常完美。
人机验证的大致流程如下:前端页面需要初始化一个由Cloudflare提供的组件。当需要验证时,例如用户点击登录按钮时,前端可以调用该组件的验证/渲染方法,触发验证过程。一旦组件验证通过,前端将获得一个令牌(token)。然后,前端携带该令牌向服务端发起请求。服务端需要将该令牌与用户的IP地址结合起来,向Cloudflare的验证接口发起请求,最终确认人机验证是否通过。需要注意的是,该令牌只能使用一次,第二次请求验证接口将会失败。
Cloudflare的人机验证会在每次用户发起请求之前进行验证,对于用户体验来说并不理想,但对于一般的爬虫请求,它能够防止其绕过CloudFlare5秒盾,从而提供非常有效的防护作用。
穿云API
但是,使用穿云API,您可以轻松地绕过Cloudflare的机器人验证,即使您需要发送10万个请求,也不必担心被识别为抓取者。
一个穿云API即可突破所有反Anti-bot机器人检查,轻松绕过Cloudflare、CAPTCHA验证,WAF,CC防护,并提供了HTTP API和Proxy,包括接口地址、请求参数、返回处理;以及设置Referer,浏览器UA和headless状态等各浏览器指纹设备特征。