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 timeapi_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 sitedef 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)returnprint(f"Got taskId: {task_id} / Getting result...")while True:time.sleep(1)  # delaypayload = {"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)returntoken = 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 爬虫活动顺利进行。记住,安全和合规同样重要,因此在实施任何自动化解决方案时,请确保遵循相关的法律和道德准则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/859685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【栈与队列】删除字符串中的所有相邻重复项

题目&#xff1a;给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 分析&#xff…

[C++]24:异常和智能指针

异常和智能指针 一.异常1.C/C的错误&#xff1a;1.C2.C3.三个关键字&#xff1a; 2.使用异常&#xff1a;1.基本概念&#xff1a;2.基本代码&#xff1a;1.基本使用&#xff1a;2.多个捕获&#xff1a;3.任意类型异常的捕获&#xff1a;4.异常的重新抛出&#xff1a; 3.异常安全…

微软将停用 App Center:React Native 开发人员应该使用以下工具

再见,应用中心!你好,EAS + Sentry + GitHub Actions! React Native 开发人员大遗憾:微软宣布将于 2025 年 3 月 31 日关闭Visual Studio App Center。 多年来, Infinite Red一直将 App Center 作为许多 React Native 咨询客户的 CI/CD 流程和开发工作流程的关键部分。它有…

License简介和Licensecc的使用

License简介和Licensecc的使用 License简介什么是LIcense简易License制作加密扫盲对称加密非对称加密 Licensecc使用构建和编译在linux上进行编译UbuntuCentOS 7CentOS 8下载并编译配置编译和测试cmake 后可以跟的参数在Linux上为Windows进行交叉编译 在windos上进行编译MSVC (…

Android反编译apk重新打签名

反编译apk 1.下载反编译工具apktool&#xff0c;可以在官网&#xff08;Install Guide | Apktool&#xff09;上下载最新版本的 Apktool 2.反编译apk文件,生成文件myapp apktool d myapp.apk 3.重新生成apk apktool b myapp -o myapp_new.apk使用 apksigner 签名 APK 文件…

【华为OD机试】二进制差异数(C++ Java JavaScript Python )

题目 题目描述 对于任意两个正整数A和B,定义它们之间的差异值和相似值: **差异值:**A、B转换成二进制后,对于二进制的每一位,对应位置的bit值不相同则为1,否则为0; **相似值:**A、B转换成二进制后,对于二进制的每一位,对应位置的bit值都为1则为1,否则为0; 现在有n个…

项目管理软件如何帮助收尾项目?

项目规划、执行、监测和控制通常是项目管理的重点。即使是项目启动也会受到关注&#xff0c;但项目收尾通常是事后才提及的。 实际上&#xff0c;项目的每个阶段都很重要。项目收尾不仅仅是按时交付、不超预算和达到预期质量。 什么是项目收尾&#xff1f; 项目收尾是项目生…

elementUI的衍生组件,avue的crud表格错位问题

问题描述&#xff1a; 每次从别的页面跳转回来就发现表格显示错位了 一通查 结果发现是有两层表格 解决办法&#xff1a; 根据开发者工具中看到的样式选择器&#xff0c;很粗暴的在全局样式文件中加一个&#xff1a; 效果&#xff1a;

学习记录696@网络安全之认证、报文完整性、密钥分发与证书

认证 即通信双方如何认证对方身份。 这种情况存在问题&#xff1a;trudy可以伪造A的IP地址。就算带上密码也可能被截获&#xff0c;用于重放攻击。 解决重放攻击的办法是随机数挑战&#xff0c;每次认证时&#xff0c;B都发一个挑战码给A。A加密后再传给B&#xff0c;如果B…

恒远世达:把握现在,高考后逆袭,开启日本留学之路!

一年一度的高考已经落幕&#xff0c;马上就要出高考分数了&#xff0c;有人欢喜有人忧&#xff0c;奋斗学习了这么多年&#xff0c;就为了考上一所理想的大学&#xff0c;一旦没考上&#xff0c;心情会非常的低落。 在传统心态中&#xff0c;高考失利意味着人生重大失败&#…

1143. 最长公共子序列(leetcode)

1143. 最长公共子序列&#xff08;leetcode&#xff09; 题目描述 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。如果不存在公共子序列 &#xff0c;返回 0 。一个字符串的子序列是指这样一个新的字符串&#xff1a;它是由原字符串在不…

BLER,RSRP,SNR,RB,MCS,RI,Tx power之间相互有什么影响?

BLER&#xff08;Block Error Rate&#xff09;、RSRP&#xff08;Reference Signal Received Power&#xff09;、SNR&#xff08;Signal-to-Noise Ratio&#xff09;、RB&#xff08;Resource Block&#xff09;、MCS&#xff08;Modulation and Coding Scheme&#xff09;、…

基于自主发明专利的杰林码哈希算法、对称加密算法和无损压缩算法的可文件追踪管控且支持linux和windows的文件压缩包工具SDK和JLM PACK软件介绍

基于自主发明专利的杰林码哈希算法、对称加密算法和无损压缩算法的可文件追踪管控且支持linux和windows的文件压缩包工具SDK1.0版发布&#xff0c;下载链接为&#xff1a; JLM PACK CSDN下载链接 JLM PACK SDK和软件的官方网站 注意测试授权证书yesine_jlmpack_test.license…

一种改进解卷积算法在旋转机械故障诊断中的应用(MATLAB)

轴承振动是随机振动。在不同的时刻&#xff0c;轴承振动值是不尽相同的&#xff0c;不能用一个确定的时间函数来描述。这是由于滚动体除了有绕轴承公转运动以外&#xff0c;还有绕自身轴线的自旋运动&#xff0c;且在轴承运转时&#xff0c;滚动接触表面形貌是不断变化的&#…

Android与JavaScript的交互,以实现从WebView中打开原生页面并传递参数

在Android应用中&#xff0c;实现Android与JavaScript的交互&#xff0c;以实现从WebView中打开原生页面并传递参数&#xff0c;可以通过以下详细步骤完成&#xff1a; 1. 准备工作 添加WebView至布局&#xff1a;在你的Activity或Fragment的XML布局文件中加入WebView控件。 …

计算机中丢失vcruntime140_1.dll如何修复?分享7种常用解决方法

vcruntime140_1.dll缺失原因分析 软件卸载或更新不当在软件卸载或更新过程中&#xff0c;如果未能正确处理依赖关系&#xff0c;可能会导致vcruntime140_1.dll文件被错误地删除或损坏。 据统计&#xff0c;约有30%的DLL文件丢失问题是由于不当的卸载或更新操作引起的。 用户…

行列视(RCV)在生产型企业中的应用与集控值班员考核体系优化

行列视&#xff08;RCV&#xff09;在生产型企业中的应用主要体现在数据整合、报表制作与可视化、数据分析与决策支持等方面&#xff0c;对于提高生产型企业的工作效率、优化管理流程以及实现数字化转型具有重要意义。而集控值班员考核体系的优化&#xff0c;则关乎于电力集控站…

git 拉下来的项目,出现“加载失败”的解决方法

现象&#xff1a; 1、对加载失败的项目&#xff0c;尝试重新加载 解决思路&#xff1a;根据上面的提示&#xff0c;打开F盘对应的 .vcxproj文件&#xff0c;查看里面关于opencv454.props的内容 先删了&#xff0c;后面再补 2、当前的工作重点是消除加载失败的情况&#xff0c;…

【杂记-浅谈TCP/IP协议模型】

TCP/IP协议模型 一、TCP/IP协议概述2、端口号使用规则 二、TCP/IP各层级 一、TCP/IP协议概述 TCP/IP&#xff0c;Transmission Control Protocol/Internet Protocol。TCP/IP协议是指一个有FTP、SMTP、TCP、UDP 、IP等协议构成的协议簇&#xff0c;是互联网通信的基础&#xff…