AWS WAF 中的验证码和挑战 | 网页抓取时如何解决这个问题

正如许多企业或爬虫用户所知,AWS WAF(Web 应用防火墙)是一个强大的安全解决方案,旨在保护 Web 应用免受常见的网络攻击和漏洞。其关键功能之一是使用 CAPTCHA 和挑战来区分合法用户和潜在的恶意机器人。虽然这增强了安全性,但也会为 Web 爬虫活动带来显著的障碍和一些不必要的麻烦。所以在本文中,我们将探讨 AWS WAF 中的 CAPTCHA 和挑战,并讨论如何克服这些障碍,以确保 Web 爬虫和企业活动顺利进行。

了解 AWS WAF 的 CAPTCHA 和挑战

众所周知,AWS WAF 通过 CAPTCHA 和挑战作为其防御机制的一部分,来防止自动化攻击和未经授权的访问。这些措施旨在验证与 Web 应用交互的用户是人类而不是机器人。例如,当您的 Web 爬虫活动中某个请求被认为是可疑时,AWS WAF 可能会向您展示 CAPTCHA 或挑战。

解决重复失败的令人烦恼的验证码吗?

发现无缝自动验证码解决方案,使用 Capsolver 的 AI 驱动自动 Web 解封技术!

使用 优惠码 领取顶级验证码解决方案;CapSolver: WEBS。兑换后,您将每次充值额外获得 5% 奖励,无限制。

  1. IP 匹配条件

Amazon WAF 可以使用无类别域间路由(CIDR)表示法为每个 IP 匹配条件配置最多 10,000 个 IP 地址范围。每个列表受此限制的约束。允许列表、拒绝列表(手动 IP 列表组件)和第三方 IP 阻止列表(IP 列表解析组件)是单独的列表,每个限制 10,000 个 IP 地址。可以手动修改允许和拒绝的 IP 集以根据需要添加或删除 IP 地址。

  1. 嵌入在 Web 应用中的蜜罐

将创建一个很少访问的端点作为蜜罐,以检测和转移内容抓取器和恶意机器人的入站请求。普通用户不会尝试访问此端点。但是,内容抓取器和恶意机器人(如扫描漏洞和抓取数据的恶意软件)可能会尝试访问蜜罐端点。在这种情况下,Amazon 将检查请求以提取其来源,然后更新相关的 Amazon WAF 规则,以阻止该 IP 地址的后续请求。

此外,AWS 通常有三种类型的验证码:

  1. 下面是一个图片网格拼图的示例。拼图要求您选择网格中包含特定类型对象的所有图片。

  2. 另一种常见的验证码是如下图所示,要求您确定绘图中汽车路径的终点。

  3. 最后一种是音频 CAPTCHA,它利用背景噪音叠加在语音上的原理。当然,与拼图一样,如果您有正确的方法,音频 CAPTCHA 也可以自动解决。

如何识别 AWS WAF?

  1. 请求 URL 的响应头检查

当请求一个 URL 时,如果响应状态码通常为 405 且响应头包含字段 X-Amzn-Waf-Action: captchaX-Amzn-Errortype: ForbiddenException,则表示当前访问被 AWS WAF 阻止。

  1. 响应 HTML 中的出现

当响应 HTML 包含诸如 awsWafcaptcha.awswaf.com 等信息时,表示需要进行 AWS 验证码处理。

<script type="text/javascript">
window.awsWafCookieDomainList = [];
window.gokuProps = {
    "key":"AQIDAHjcYu/*****",
    "iv":"CgAHfjMvRjAAAA3q",
    "context":"MK7Z1IlZc****"
};
</script>
<script src="https://***.token.awswaf.com/***/challenge.js"></script>
<script src="https://***.captcha.awswaf.com/****/captcha.js"></script>

解决 WAF 的技巧

我们可以通过 CapSolver 实现合规的自动拼图解决。CapSolver 是一个提供验证码识别解决方案的服务。它为不同的验证码系统(包括 WAF)提供各种任务类型。

CapSolver 提供两种验证码解决服务,可以帮助您轻松解决 WAF。一个服务是使用 CapSolver 的 API,另一个是下载 扩展

接下来按照我的步骤,看看如何在 Web 抓取中实现自动化解决方案,非常简单,让我们深入探讨!

步骤 1 登录

您可以 注册 CapSolver 并访问我们的 CAPTCHA 服务,目前支持免费试用。

步骤 2 获取您的免费 API!

注册后,您可以从主页面板获得您的 API 密钥。

代码示例

要通过代码获取有效的 aws-waf-token,您可以使用 Python、Go、JavaScript 等主流语言,以下是使用 Python 获取的方法:

# pip install requests
import requests
import time

api_key = "YOUR_API_KEY"  # TODO: your api key of capsolver
site_url = "https://efw47fpad9.execute-api.us-east-1.amazonaws.com/latest"  # TODO: page url of your site

def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'AntiAwsWafTaskProxyLess',
            "websiteURL": site_url
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("Failed to create task:", res.text)
        return
    print(f"Got taskId: {task_id} / Getting result...")

    while True:
        time.sleep(1)  # delay
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('cookie')
        if status == "failed" or resp.get("errorId"):
            print("Solve failed! response:", res.text)
            return

token = capsolver()
print(token)

很快,您将看到输出是所需的 aws-waf-token

Got taskId: 373a6363-c03f-48d5-85eb-05e553980a64 / Getting result...
2d8415fb-43ec-42c5-8106-c51194d5eb14:EQoAljIa3jkRAAAA:Z+bkUZcJEl90QIM46acsmio......

接下来,尝试看看 aws-waf-token 是否实际有效。

def check_website(token):
    headers = {
        "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "accept-language": "en-US,en;q=0.9,sq;q=0.8,ak;q=0.7,ar;q=0.6,an;q=0.5,am;q=0.4,as;q=0.3,az;q=0.2,ast;q=0.1,ee;q=0.1,ay;q=0.1,ga;q=0.1,et;q=0.1,oc;q=0.1,or;q=0.1,om;q=0.1,eu;q=0.1,be;q=0.1,bm;q=0.1,bg;q=0.1,nso;q=0.1,is;q=0.1,pl;q=0.1,bs;q=0.1,fa;q=0.1,bho;q=0.1,br;q=0.1,tn;q=0.

1,fi;q=0.1,fr;q=0.1",
        "cookie": token,
    }
    res = requests.get(site_url, headers=headers)
    print(f"Got response {res.status_code}")
    print(f"Cookies: {res.cookies}")

check_website(token)

结论

虽然 AWS WAF 的 CAPTCHA 和挑战可以有效防止恶意机器人,但也可能对合法的 Web 爬虫活动带来不便。然而,通过理解 AWS WAF 的工作原理并采用像 CapSolver 这样的解决方案,您可以绕过这些障碍,确保 Web 爬虫活动顺利进行。记住,安全和合规同样重要,因此在实施任何自动化解决方案时,请确保遵循相关的法律和道德准则。

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值