提问人:Andra 提问时间:5/14/2018 最后编辑:undetected SeleniumAndra 更新时间:3/9/2023 访问量:72610
有没有可能绕过 Cloudflare 安全检查的方法?
Is there any possible ways to bypass cloudflare security checks?
问:
我们都知道,有时 cloudflare 喜欢检查他们的客户访客,以确保访客不是真正的人类。安全检查要求我们通过 Google Recaptcha。我想问的是,是否可以使用我们自己的服务器(即使使用远程服务器并自己回答验证码等)以及如何传递它?
答:
对于你自己,是的,你可以。
您可以为 IP 地址创建自定义规则,并将“安全级别”设置为“基本关闭”。
安全级别是控制是否向特定访问者提出质询的级别
。
通过禁用 IP 地址的安全级别,您可以在自己的网站上有效地绕过此保护。
评论
当您访问受 cloudflare 保护的站点时,它将包含您无法绕过的安全检查,如果失败,最终您的访问将被拒绝,并且由于来自低信誉 IP 地址的请求,您将被重定向到验证码挑战页面。
IP 信誉是根据 Project Honeypot、外部公共 IP 信息以及来自 Web 应用程序防火墙和 DDoS 的内部威胁情报计算得出的。
溶液
在这些情况下,一个潜在的解决方案是使用 undetected-chromedriver 来初始化 Chrome 浏览上下文。
undetected-chromedriver 是一个优化的 Selenium Chromedriver 补丁,它不会触发 Distill Network / Imperva / DataDome / Botprotect.io 等反机器人服务。它会自动下载驱动程序二进制文件并对其进行修补。
Python 示例代码:
import undetected_chromedriver as uc from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument("start-maximized") driver = uc.Chrome(options=options) driver.get('https://bet365.com')
另类
另一种解决方案是使用以下步骤通过 Project Honey Pot 网站将您的 IP 地址列入白名单:
- 您必须编辑页面规则,每当请求与您定义的以下两个基本原则之一匹配时,该规则就会触发某些操作:
- 只有最高优先级的匹配页规则对请求生效。
- 页面规则在 Cloudflare 仪表板中按降序排列优先级,最高优先级规则位于顶部。
- 在防火墙应用程序的“设置”选项卡中或通过“页面规则”禁用“受攻击”模式(高级DDOS保护),“安全级别”会显示JS质询页面。
TL的;博士
您可以在视频中找到详细的端到端过程,标题为“需要注意:再过一步验证码CloudFlare错误”。
当然,这可以通过多种方式实现。其中之一就是使用一个“真实的模拟浏览器”来解析javascript。
另一种方法是 - 如果你在无头服务器上运行它 - 使用无头浏览器为你做到这一点。在第一个请求之后,您可以存储 cookie 并在基本的 http 客户端(如 jsoup (java))中重用它。
使用 JBrowserDriver(无头)和 java 的示例:
JBrowserDriver jBrowserDriver = null;
public JBrowserDriver getDriver(Boolean headless) {
if (jBrowserDriver == null) {
log.info("JBrowser was null, initalizing");
jBrowserDriver = new JBrowserDriver(Settings.builder()
.timezone(Timezone.EUROPE_BERLIN)
.ssl("compatible")
.cache(true)
.javascript(true)
.headless(headless)
.userAgent(UserAgent.CHROME)
.logTrace(true)
.loggerLevel(Level.ALL)
.build());
}
return jBrowserDriver;
}
private void testFunction() {
// ..
jDriver.get("https://cloudflare.site");
driverCookies = jDriver.manage().getCookies();
HashMap<String, String> cookieMap = new HashMap<>();
driverCookies.forEach(cookie -> cookieMap.put(cookie.getName(), cookie.getValue()));
Document document = Jsoup.connect(requestPage).cookies(cookieMap).get();
}
对于绕过云耀斑造成的任何损害,我不负责,但只要人类可以绕过它,模拟客户端总是可以做到这一点的。
编辑:如果后面还有一个验证码,可能很难绕过它。但通常,如果您没有登录谷歌帐户,或者服务器认为您是机器人,就会发生这种情况。只需重复使用由谷歌身份验证生成的 cookie,并确保您始终重复使用和发送相同的 cookie。
Cloudflare 还会检查(不确定)您的客户是否正在请求 css 和 javascript 等资产。
您可能还需要使用假客户端来请求它们。
由于该问题没有建议用户想要绕过Cloudflare保护的语言,因此我将提供node.js的代码:
库:
npm i puppeteer-extra puppeteer-extra-plugin-stealth puppeteer
节点:
const puppeteer = require('puppeteer-extra')
const pluginStealth = require('puppeteer-extra-plugin-stealth')
const { executablePath } = require('puppeteer')
const link = 'https://www.g2.com/'
const getHtmlThoughCloudflare = async (url) => {
puppeteer.use(pluginStealth())
const result = await puppeteer
.launch({ headless: true })
.then(async (browser) => {
const page = await browser.newPage()
await page.goto(url)
const html = await page.content()
await browser.close()
return html
})
console.log(` HTML: ${result}`)
return result // html
}
getHtmlThoughCloudflare(link)
评论