有没有可能绕过Cloudflare的安全检查?

14

我们都知道,有时Cloudflare会检查客户端访问者以确保访问者不是真正的人类。安全检查要求我们通过Google Recaptcha。我想问的是,是否可能使用我们自己的服务器来通过该检查(即使使用远程服务器并自己回答验证码)?如何实现?


2
如果安全检查在编程方面很容易被绕过,那么犯罪分子等是否可能选择使用相同的技术呢? - Dragonthoughts
1
不仅可以通过编程的方式,还可以由真正的人类控制服务器。 - Andra
4个回答

12
当您访问由Cloudflare保护的网站时,它会包含一个安全检查,您无法绕过该检查,如果失败,最终将被拒绝访问,并由于低声誉IP地址的请求而重定向到captcha挑战页面。
IP声誉是基于Project Honeypot、外部公共IP信息以及Web应用程序防火墙DDoS的内部威胁情报计算出来的。

解决方案

在这些情况下,潜在的解决方案是使用undetected-chromedriver来初始化Chrome浏览上下文

undetected-chromedriver是一个经过优化的Selenium Chromedriver补丁,不会触发反机器人服务,如Distill Network / Imperva / DataDome / Botprotect.io。它会自动下载驱动程序二进制文件并打补丁。

  • Python Sample Code:

    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地址进行白名单处理,具体步骤如下:

  • 您需要编辑页面规则,当请求匹配您定义的两个基本原则中的一个URL模式时触发某些操作:
    • 只有最高优先级的匹配页面规则会对请求产生影响。
    • 页面规则在Cloudflare仪表板中按降序排序,最高优先级规则位于顶部。
  • 在防火墙应用程序的设置选项卡或通过页面规则禁用Under Attack mode(高级DDOS保护),安全级别将呈现JS挑战页面。

简短概述

详细的端到端过程可以在题为 Attention Required one more step captcha CloudFlare Error 的视频中找到。


5

当然,有几种方法可以实现。其中一种是使用“真实模拟浏览器”解析JavaScript。

另一种方法是-如果您在无头服务器上运行它-使用一个无头浏览器来代替您完成此操作。在第一次请求后,您可以存储Cookie并在基本HTTP客户端(如Java中的jsoup)中重复使用它。

以下是使用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();

}

我不对绕过Cloudflare所造成的任何损害负责,但只要人类能够绕过它,就有可能使用模拟客户端进行操作。

编辑:如果还有一个reCaptcha,那么绕过它可能会很困难。但通常情况下,这种情况发生在你没有登录谷歌帐户或者服务器认为你是一个机器人的时候。只需重用由Google身份验证生成的cookie,并确保始终重用并发送相同的cookie。

Cloudflare还会检查-不确定-您的客户端是否请求像CSS和JavaScript这样的资源。

您可能需要使用虚拟客户端请求它们。


1

对于你自己,是的,你可以。

你可以为你的IP地址创建一个自定义规则并将 安全等级 设置为 基本关闭

安全等级 控制是否向特定访问者呈现挑战。

通过禁用你的IP地址的安全等级,你可以在自己的网站上有效地绕过此保护。


2
那对于其他网站没有帮助... - mirabilos
2
问题特别要求如何绕过它来为他们自己的服务器服务。 - drew010

1

由于该问题没有提供用户想要绕过Cloudflare保护的语言,因此我将提供Node.js的代码:

库:

npm i puppeteer-extra puppeteer-extra-plugin-stealth puppeteer

nodejs:

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接