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

Is there any possible ways to bypass cloudflare security checks?

提问人:Andra 提问时间:5/14/2018 最后编辑:undetected SeleniumAndra 更新时间:3/9/2023 访问量:72610

问:

我们都知道,有时 cloudflare 喜欢检查他们的客户访客,以确保访客不是真正的人类。安全检查要求我们通过 Google Recaptcha。我想问的是,是否可以使用我们自己的服务器(即使使用远程服务器并自己回答验证码等)以及如何传递它?

Security Server Recaptcha 验证码 Cloudflare

评论

2赞 Dragonthoughts 5/14/2018
如果安全检查很容易以编程方式绕过,那么犯罪分子等是否可能选择使用相同的技术?
1赞 Andra 5/14/2018
不仅通过编程方式,而且由真人控制服务器。

答:

1赞 drew010 5/16/2018 #1

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

您可以为 IP 地址创建自定义规则,并将“安全级别”设置为“基本关闭”。

安全级别是控制是否向特定访问者提出质询的级别

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

评论

2赞 mirabilos 12/20/2020
这在其他人的网站上无济于事......
2赞 drew010 12/22/2020
该问题专门询问如何为他们自己的服务器绕过它。
12赞 undetected Selenium 11/23/2020 #2

当您访问受 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错误”。

5赞 Emanuel 11/23/2020 #3

当然,这可以通过多种方式实现。其中之一就是使用一个“真实的模拟浏览器”来解析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 等资产。

您可能还需要使用假客户端来请求它们。

1赞 Roma N 3/9/2023 #4

由于该问题没有建议用户想要绕过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)