
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Mon, 13 Apr 2026 18:51:22 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Beyond IP lists: a registry format for bots and agents]]></title>
            <link>https://blog.cloudflare.com/agent-registry/</link>
            <pubDate>Thu, 30 Oct 2025 22:00:00 GMT</pubDate>
            <description><![CDATA[ We propose an open registry format for Web Bot Auth to move beyond IP-based identity. This allows any origin to discover and verify cryptographic keys for bots, fostering a decentralized and more trustworthy ecosystem. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>As bots and agents start <a href="https://blog.cloudflare.com/web-bot-auth/"><u>cryptographically signing their requests</u></a>, there is a growing need for website operators to learn public keys as they are setting up their service. I might be able to find the public key material for well-known fetchers and crawlers, but what about the next 1,000 or next 1,000,000? And how do I find their public key material in order to verify that they are who they say they are? This problem is called <i>discovery.</i></p><p>We share this problem with <a href="https://aws.amazon.com/bedrock/agentcore/"><u>Amazon Bedrock AgentCore</u></a>, a comprehensive agentic platform to build, deploy and operate highly capable agents at scale, and their <a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/browser-tool.html"><u>AgentCore Browser</u></a>, a fast, secure, cloud-based browser runtime to enable AI agents to interact with websites at scale. The AgentCore team wants to make it easy for each of their customers to sign <i>their own requests</i>, so that Cloudflare and other operators of CDN infrastructure see agent signatures from individual agents rather than AgentCore as a monolith. (Note: this method does not identify individual users.) In order to do this, Cloudflare needed a way to ingest and register the public keys of AgentCore’s customers at scale. </p><p>In this blog post, we propose a registry of bots and agents as a way to easily discover them on the Internet. We also outline how <a href="https://blog.cloudflare.com/web-bot-auth/"><u>Web Bot Auth</u></a> can be expanded with a registry format. Similar to IP lists that can be authored by anyone and easily imported, the <a href="https://datatracker.ietf.org/doc/draft-meunier-webbotauth-registry/"><u>registry format</u></a> is a list of URLs at which to retrieve agent keys and can be authored and imported easily.</p><p>We believe such registries should foster and strengthen an open ecosystem of curators that website operators can trust.</p>
    <div>
      <h2>A need for more trustworthy authentication</h2>
      <a href="#a-need-for-more-trustworthy-authentication">
        
      </a>
    </div>
    <p>In May, we introduced a protocol proposal called <a href="https://blog.cloudflare.com/web-bot-auth/"><u>Web Bot Auth</u></a>, which describes how bot and agent developers can cryptographically sign requests coming from their infrastructure. </p><p>There have now been multiple implementations of the proposed protocol, from <a href="https://vercel.com/changelog/vercels-bot-verification-now-supports-web-bot-auth"><u>Vercel</u></a> to <a href="https://changelog.shopify.com/posts/authorize-custom-crawlers-and-tools-with-new-crawler-access-keys"><u>Shopify</u></a> to <a href="https://www.cloudflare.com/press/press-releases/2025/cloudflare-collaborates-with-leading-payments-companies-to-secure-and-enable-agentic-commerce/"><u>Visa</u></a>. It has been actively <a href="https://mailarchive.ietf.org/arch/browse/web-bot-auth/"><u>discussed</u></a> and contributions have been made. Web Bot Auth marks a first step towards moving from brittle identification, like IPs and user agents, to more trustworthy cryptographic authentication. However, like IP addresses, cryptographic keys are a pseudonymous form of identity. If you operate a website without the scale and reach of large CDNs, how do you discover the public key of known crawlers?</p><p>The first protocol proposal suggested one approach: bot operators would provide a newly-defined HTTP header Signature-Agent that refers to an HTTP endpoint hosting their keys. Similar to IP addresses, the default is to allow all, but if a particular operator is making too many requests, you can start taking actions: increase their rate limit, contact the operator, etc.</p><p>Here’s an example from <a href="https://help.shopify.com/en/manual/promoting-marketing/seo/crawling-your-store"><u>Shopify's online store</u></a>:</p>
            <pre><code>Signature-Agent: "https://shopify.com"</code></pre>
            
    <div>
      <h2>A registry format</h2>
      <a href="#a-registry-format">
        
      </a>
    </div>
    <p>With all that in mind, we come to the following problem. How can Cloudflare ensure customers have control over the traffic they want to allow, with sensible defaults, while fostering an open curation ecosystem that doesn’t lock in customers or small origins?</p><p>Such an ecosystem exists for lists of IP addresses (e.g.<a href="https://github.com/antoinevastel/avastel-bot-ips-lists/blob/master/avastel-proxy-bot-ips-1day.txt"><u> avestel-bots-ip-lists</u></a>) and robots.txt (e.g.<a href="https://github.com/ai-robots-txt/ai.robots.txt"><u> ai-robots-txt</u></a>). For both, you can find canonical lists on the Internet to easily configure your website to allow or disallow traffic from those IPs. They provide direct configuration for your nginx or haproxy, and you can use it to configure your Cloudflare account. For instance, I could import the robots.txt below:</p>
            <pre><code>User-agent: MyBadBot
Disallow: /</code></pre>
            <p>This is where the registry format comes in, providing a list of URLs pointing to Signature Agent keys:</p>
            <pre><code># AI Crawler
https://chatgpt.com/.well-known/http-message-signatures-directory
https://autorag.ai.cloudflare.com/.well-known/http-message-signatures-directory
 
# Test signature agent card
https://http-message-signatures-example.research.cloudflare.com/.well-known/http-message-signatures-directory</code></pre>
            <p>And that's it. A registry could contain a list of all known signature agents, a curated list for academic research agents, for search agents, etc.</p><p>Anyone can maintain and host these lists. Similar to IP or robots.txt list, you can host such a registry on any public file system. This means you can have a repository on GitHub, put the file on Cloudflare R2, or send it as an email attachment. Cloudflare intends to provide one of the first instances of this registry, so that others can contribute to it or reference it when building their own. </p>
    <div>
      <h2>Learn more about an incoming request</h2>
      <a href="#learn-more-about-an-incoming-request">
        
      </a>
    </div>
    <p>Knowing the Signature-Agent is great, but not sufficient. For instance, to be a verified bot, Cloudflare requires a contact method, in case requests from that infrastructure suddenly fail or change format in a way that causes unexpected errors upstream. In fact, there is a lot of information an origin might want to know: a name for the operator, a contact method, a logo, the expected crawl rate, etc.</p><p>Therefore, to complement the registry format, we have proposed a <a href="https://thibmeu.github.io/http-message-signatures-directory/draft-meunier-webbotauth-registry.html#name-signature-agent-card"><u>signature-agent card format</u> that </a>extends the JWKS directory (<a href="https://www.rfc-editor.org/rfc/rfc7517"><u>RFC 7517</u></a>) with additional metadata. Similar to an old-fashioned contact card, it includes all the important information someone might want to know about your agent or crawler. </p><p>We provide an example below for illustration. Note that the fields may change: introducing jwks-uri, logo being more descriptive, etc.</p>
            <pre><code>{
  "client_name": "Example Bot",
  "client_uri": "https://example.com/bot/about.html",
  "logo_uri": "https://example.com/",
  "contacts": ["mailto:bot-support@example.com"],
  "expected-user-agent": "Mozilla/5.0 ExampleBot",
  "rfc9309-product-token": "ExampleBot",
  "rfc9309-compliance": ["User-Agent", "Allow", "Disallow", "Content-Usage"],
  "trigger": "fetcher",
  "purpose": "tdm",
  "targeted-content": "Cat pictures",
  "rate-control": "429",
  "rate-expectation": "avg=10rps;max=100rps",
  "known-urls": ["/", "/robots.txt", "*.png"],
  "keys": [{
    "kty": "OKP",
    "crv": "Ed25519",
    "kid": "NFcWBst6DXG-N35nHdzMrioWntdzNZghQSkjHNMMSjw",
    "x": "JrQLj5P_89iXES9-vFgrIy29clF9CC_oPPsw3c5D0bs",
    "use": "sig",
    "nbf": 1712793600,
    "exp": 1715385600
  }]
}</code></pre>
            
    <div>
      <h2>Operating a registry</h2>
      <a href="#operating-a-registry">
        
      </a>
    </div>
    <p>Amazon Bedrock AgentCore, an agentic platform for building and deploying AI agents at scale, adopted Web Bot Auth for its AgentCore Browser service (learn more in <a href="https://aws.amazon.com/blogs/machine-learning/reduce-captchas-for-ai-agents-browsing-the-web-with-web-bot-auth-preview-in-amazon-bedrock-agentcore-browser/">their post)</a>. AgentCore Browser intends to transition from a service signing key that is currently available in their public preview, to customer-specific keys, once the protocol matures. Cloudflare and other operators of origin protection service will be able to see and validate signatures from individual AgentCore customers rather than AgentCore as a whole.</p><p>Cloudflare also offers a registry for bots and agents it trusts, provided through Radar. It uses the <a href="https://assets.radar.cloudflare.com/bots/signature-agent-registry.txt"><u>registry format</u></a> to allow for the consumption of bots trusted by Cloudflare on your server.</p><p>You can use these registries today – we’ve provided a demo in Go for <a href="https://caddyserver.com/"><u>Caddy server</u></a> that would allow us to import keys from multiple registries. It’s on <a href="https://github.com/cloudflare/web-bot-auth/pull/52"><u>cloudflare/web-bot-auth</u></a>. The configuration looks like this:</p>
            <pre><code>:8080 {
    route {
        # httpsig middleware is used here
        httpsig {
            registry "http://localhost:8787/test-registry.txt"
            # You can specify multiple registries. All tags will be checked independantly
            registry "http://example.test/another-registry.txt"
        }

        # Responds if signature is valid
        handle {
            respond "Signature verification succeeded!" 200
        }
    }
}</code></pre>
            <p>There are several reasons why you might want to operate and curate a registry leveraging the <a href="https://www.ietf.org/archive/id/draft-meunier-webbotauth-registry-01.html#name-signature-agent-card"><u>Signature Agent Card format</u></a>:</p><ol><li><p><b>Monitor incoming </b><code><b>Signature-Agent</b></code><b>s.</b> This should allow you to collect signature-agent cards of agents reaching out to your domain.</p></li><li><p><b>Import them from existing registries, and categorize them yourself.</b> There could be a general registry constructed from the monitoring step above, but registries might be more useful with more categories.</p></li><li><p><b>Establish direct relationships with agents.</b> Cloudflare does this for its<a href="https://radar.cloudflare.com/bots#verified-bots"> <u>bot registry</u></a> for instance, or you might use a public GitHub repository where people can open issues.</p></li><li><p><b>Learn from your users.</b> If you offer a security service, allowing your customers to specify the registries/signature-agents they want to let through allows you to gain valuable insight.</p></li></ol>
    <div>
      <h2>Moving forward</h2>
      <a href="#moving-forward">
        
      </a>
    </div>
    <p>As cryptographic authentication for bots and agents grows, the need for discovery increases.</p><p>With the introduction of a lightweight format and specification to attach metadata to Signature-Agent, and curate them in the form of registries, we begin to address this need. The HTTP Message Signature directory format is being expanded to include some self-certified metadata, and the registry maintains a curation ecosystem.</p><p>Down the line, we predict that clients and origins will choose the signature-agent they trust, use a common format to migrate their configuration between CDN providers, and rely on a third-party registry for curation. We are working towards integrating these capabilities into our bot management and rule engines.</p><p>If you’d like to experiment, our demo is on <a href="https://github.com/cloudflare/web-bot-auth/pull/52"><u>GitHub</u></a>. If you’d like to help us, <a href="https://blog.cloudflare.com/cloudflare-1111-intern-program/"><u>we’re hiring 1,111 interns</u></a> over the course of next year, and have <a href="https://www.cloudflare.com/careers/"><u>open positions</u></a>.</p> ]]></content:encoded>
            <category><![CDATA[Research]]></category>
            <category><![CDATA[Bots]]></category>
            <guid isPermaLink="false">3VeTsp2f9v3B1QZF0oglUV</guid>
            <dc:creator>Thibault Meunier</dc:creator>
            <dc:creator>Maxime Guerreiro</dc:creator>
        </item>
        <item>
            <title><![CDATA[Cloudflare is free of CAPTCHAs; Turnstile is free for everyone]]></title>
            <link>https://blog.cloudflare.com/turnstile-ga/</link>
            <pubDate>Fri, 29 Sep 2023 13:00:00 GMT</pubDate>
            <description><![CDATA[ Now that we’ve eliminated CAPTCHAs at Cloudflare, we want to hasten the demise of CAPTCHAs across the internet. We’re thrilled to announce that Turnstile is generally available, and Turnstile’s ‘Managed’ mode is now completely free to everyone for unlimited use.  ]]></description>
            <content:encoded><![CDATA[ <p></p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2562yydO3PNFG88W5iTE0P/ee8cda8c9929f566e738c0e0f75b2a9b/image3-37.png" />
            
            </figure><p>For years, we’ve <a href="/moving-from-recaptcha-to-hcaptcha/">written</a> that CAPTCHAs drive us crazy. Humans give up on CAPTCHA puzzles <a href="https://www.math.unipd.it/~gaggi/doc/ads20.pdf">approximately 15% of the time</a> and, maddeningly, <a href="https://www.usenix.org/conference/usenixsecurity23/presentation/searles">CAPTCHAs are significantly easier for bots</a> to solve than they are for humans. We’ve spent the past three and a half years working to build a better experience for humans that’s just as effective at stopping bots. As of this month, we’ve finished replacing every CAPTCHA issued by Cloudflare with Turnstile, our new <a href="https://www.cloudflare.com/products/turnstile/">CAPTCHA replacement</a> (pictured below). Cloudflare will never issue another visual puzzle to anyone, for any reason.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/10LzRAr38KzxAANQIVxwZT/0fe5ec0867c70f8217a6deff4b244f9b/image2.gif" />
            
            </figure><p>Now that we’ve eliminated CAPTCHAs at Cloudflare, we want to make it easy for anyone to do the same, even if they don’t use other Cloudflare services. We’ve decoupled Turnstile from our platform so that any website operator on any platform can use it just by adding <a href="https://github.com/cloudflare/turnstile-demo-workers/blob/main/src/explicit.html#L74-L85">a few lines of code</a>. We’re thrilled to announce that Turnstile is now generally available, and <b>Turnstile’s ‘Managed’ mode is now completely free to everyone for unlimited use</b>.</p>
    <div>
      <h3>Easy on humans, hard on bots, private for everyone</h3>
      <a href="#easy-on-humans-hard-on-bots-private-for-everyone">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6DQmrvGrrHUPlLMHrknjyY/99ea339af6278970204cb33bcdf5520f/image6-5.png" />
            
            </figure><p>There’s a lot that goes into Turnstile’s simple checkbox to ensure that it’s easy for everyone, preserves user privacy, and does its job stopping <a href="https://www.cloudflare.com/learning/bots/what-is-a-bot/">bots</a>. Part of making challenges better for everyone means that everyone gets the same great experience, no matter what browser you’re using. Because we do not employ a visual puzzle, users with low vision or blindness get the same easy to use challenge flow as everyone else.</p><p>It was particularly important for us to avoid falling back to audio CAPTCHAs to offer an experience accessible to everyone. Audio CAPTCHAs are often much worse than even visual CAPTCHAs for humans to solve, with only <a href="https://web.stanford.edu/~jurafsky/burszstein_2010_captcha.pdf">31.2% of audio challenges</a> resulting in a three-person agreement on what the correct solution actually is. The prevalence of free speech-to-text services has made it easy for bots to solve audio CAPTCHAs as well, with <a href="https://uncaptcha.cs.umd.edu/papers/uncaptcha_woot17.pdf">a recent study</a> showing bots can accurately solve audio CAPTCHAs in over 85% of attempts. We’re proud to state that Turnstile is WCAG 2.1 Level AA compliant, while eliminating the need for audio CAPTCHAs as well as visual ones.</p><p>We also created Turnstile to be privacy focused. Turnstile meets <a href="https://www.cloudflare.com/learning/privacy/what-is-eprivacy-directive/">ePrivacy Directive</a>, <a href="https://www.cloudflare.com/learning/privacy/what-is-the-gdpr/">GDPR</a> and <a href="https://www.cloudflare.com/learning/privacy/what-is-the-ccpa/">CCPA</a> compliance requirements, as well as the strict requirements of our own privacy commitments. In addition, Cloudflare's <a href="https://marketplace.fedramp.gov/products/FR2000863987">FedRAMP Moderate authorized package</a>, "Cloudflare for Government" now includes Turnstile. We don’t rely on tracking user data, like what other websites someone has visited, to determine if a user is a human or robot. Our business is protecting websites, not selling ads, so operators can deploy Turnstile knowing that their users’ data is safe.</p><p>With all of our emphasis on how <i>easy</i> it is to pass a Turnstile challenge, you would be right to ask how it can stop a bot. If a bot can find <a href="https://www.vox.com/22436832/captchas-getting-harder-ai-artificial-intelligence">all images with crosswalks</a> in grainy photos faster than we can, surely it can check a box as well. Bots definitely can check a box, and they can even <a href="https://arxiv.org/abs/1903.01003">mimic the erratic path of human mouse movement</a> while doing so. For Turnstile, the actual act of checking a box isn’t important, it’s the background data we’re analyzing while the box is checked that matters. We find and stop bots by running a series of in-browser tests, checking browser characteristics, native browser APIs, and asking the browser to pass lightweight tests (ex: proof-of-work tests, proof-of-space tests) to prove that it’s an actual browser. The current deployment of Turnstile checks billions of visitors every day, and we are able to identify browser abnormalities that bots exhibit while attempting to pass those tests.</p><p>For over one year, <a href="/end-cloudflare-captcha/">we used our Managed Challenge</a> to rotate between CAPTCHAs and our own Turnstile challenge to compare our effectiveness. We found that <b>even without asking users for any interactivity at all</b>, Turnstile was just as effective as a CAPTCHA. Once we were sure that the results were effective at coping with the response from bot makers, we replaced the CAPTCHA challenge with our own checkbox solution. We present this extra test when we see potentially suspicious signals, and it helps us provide an even greater layer of security.</p>
    <div>
      <h3>Turnstile is great for fighting fraud</h3>
      <a href="#turnstile-is-great-for-fighting-fraud">
        
      </a>
    </div>
    <p>Like all sites that offer services for free, Cloudflare sees our fair share of automated account signups, which can include “new account fraud,” where bad actors automate the creation of many different accounts to abuse our platform. To help combat this abuse, we’ve rolled out Turnstile’s invisible mode to protect our own signup page. This month, we’ve blocked <b>over</b> <b>1 million automated signup attempts</b> using Turnstile, without a reported false positive or any change in our self-service billings that rely on this signup flow.  </p>
    <div>
      <h3>Lessons from the Turnstile beta</h3>
      <a href="#lessons-from-the-turnstile-beta">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6Fiihb5s0WfTPdtLrqx4ro/7b93471efb6a16ba777e5249405ee726/image5-11.png" />
            
            </figure><p>Over the past twelve months, we’ve been grateful to see how many people are eager to try, then rely on, and integrate Turnstile into their web applications. It’s been rewarding to see the developer community embrace Turnstile as well. We list some of the community created Turnstile integrations <a href="https://developers.cloudflare.com/turnstile/community-resources/">here</a>, including integrations with <a href="https://www.cloudflare.com/integrations/wordpress/">WordPress</a>, Angular, Vue, and a Cloudflare recommended <a href="https://www.npmjs.com/package/@marsidev/react-turnstile">React library</a>. We’ve listened to customer feedback, and added support for <a href="https://developers.cloudflare.com/turnstile/reference/supported-languages/">17 new languages</a>, <a href="https://developers.cloudflare.com/turnstile/get-started/client-side-rendering/">new callbacks</a>, and <a href="https://developers.cloudflare.com/turnstile/reference/client-side-errors/">new error codes</a>.</p><p>76,000+ users have signed up, but our biggest single test by far was the <a href="/how-cloudflare-scaled-and-protected-eurovision-2023-voting/">Eurovision final vote</a>. Turnstile runs on challenge pages on over 25 million Cloudflare websites. Usually, that makes Cloudflare the far and away biggest Turnstile consumer, until the final Eurovision vote. During that one hour, challenge traffic from the Eurovision voting site outpaced the use of challenge pages on those 25 million sites combined! Turnstile handled the enormous spike in traffic without a hitch.</p><p>While a lot went well during the Turnstile beta, we also encountered some opportunities for us to learn. We were initially resistant to disclosing why a Turnstile challenge failed. After all, if bad actors know what we’re looking for, it becomes easier for bots to fool our challenges until we introduce new detections. However, during the Turnstile beta, we saw a few scenarios where legitimate users could not pass a challenge. These scenarios made it clear to us that we need to be transparent about why a challenge failed to help aid any individual who might modify their browser in a way that causes them to get caught by Turnstile. We now publish detailed client-side error codes to surface the reason why a challenge has failed. Two scenarios came up on several occasions that we didn’t expect:</p><p>First, we saw that desktop computers at least 10 years old frequently had expired motherboard batteries, and computers with bad motherboard batteries very often keep inaccurate time. This is because without the motherboard battery, a desktop computer’s clock will stop operating when the computer is off. Turnstile checks your computer’s system time to detect when a website operator has accidentally configured a challenge page to be cached, as caching a challenge page will cause it to become impassable. Unfortunately, this same check was unintentionally catching humans who just needed to update the time. When we see this issue, we now surface a clear error message to the end user to update their system time. We’d prefer to never have to surface an error in the first place, so we’re working to develop new ways to check for cached content that won’t impact real people.</p><p>Second, we find that a few privacy-focused users often ask their browsers to go beyond standard practices to preserve their anonymity. This includes changing their user-agent (something bots will do to evade detection as well), and preventing third-party scripts from executing entirely. Issues caused by this behavior can now be displayed clearly in a Turnstile widget, so those users can immediately understand the issue and make a conscientious choice about whether they want to allow their browser to pass a challenge.</p><p>Although we have some of the most sensitive, thoroughly built monitoring systems at Cloudflare, we did not catch either of these issues on our own. We needed to talk to users affected by the issue to help us understand what the problem was. Going forward, we want to make sure we always have that direct line of communication open. We’re rolling out a new feedback form in the Turnstile widget, to ensure any future corner cases are addressed quickly and with urgency.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/cydzYwhoIVTnaMCPmrYVV/f7ff6163cf69dee1abe00f7b5421cd8f/Screenshot-2023-09-29-at-11.37.58.png" />
            
            </figure>
    <div>
      <h3>Turnstile: GA and Free for Everyone</h3>
      <a href="#turnstile-ga-and-free-for-everyone">
        
      </a>
    </div>
    <p>Announcing Turnstile’s General Availability means that Turnstile is now completely production ready, available for free for unlimited use via our visible widget in Managed mode. Turnstile Enterprise includes SaaS platform support and a visible mode without the Cloudflare logo. Self-serve customers can expect a pay-as-you-go option for advanced features to be available in early 2024. Users can continue to access Turnstile’s advanced features below our 1 million siteverify request limit, as has been the case during the beta. If you’ve been waiting to try Turnstile, head over to our <a href="https://www.cloudflare.com/products/turnstile/">signup page</a> and create an account!</p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Turnstile]]></category>
            <category><![CDATA[CAPTCHA]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Bots]]></category>
            <guid isPermaLink="false">3ijPrY6Heu8jsF4JTYQtx6</guid>
            <dc:creator>Benedikt Wolters</dc:creator>
            <dc:creator>Maxime Guerreiro</dc:creator>
            <dc:creator>Adam Martinetti</dc:creator>
        </item>
        <item>
            <title><![CDATA[Speeding up APIs with Ricochet for API Gateway]]></title>
            <link>https://blog.cloudflare.com/speeding-up-apis-ricochet-for-api-gateway/</link>
            <pubDate>Fri, 23 Jun 2023 13:00:17 GMT</pubDate>
            <description><![CDATA[ Today we’re announcing Ricochet for API Gateway, the easiest way for Cloudflare customers to achieve faster API responses through automatic, intelligent API response caching ]]></description>
            <content:encoded><![CDATA[ <p></p><p>APIs form the backbone of communication between apps and services on the Internet. They are a quick way for an application to ask for data or ask that a task be performed by a service. For example, anyone can write a weather app without being a meteorologist: simply ask a <a href="https://developer.accuweather.com/">weather API</a> for the forecast and display it in your app.</p><p>Speed is inherent to the API use case. Rather than transferring bulky files like images and HTML, APIs only share the essential data needed to render a webpage or an app. However, despite their efficiency, Internet latency can still impede API data transfers. If the server processing a user’s API request is located far from that user, the network round trip time can degrade that user’s experience.</p><p>Cloudflare's global network is specifically designed to optimize and accelerate internet traffic, including APIs. Our users enjoy features like <a href="https://www.cloudflare.com/dns/">11ms DNS responses</a>, <a href="https://www.cloudflare.com/load-balancing/">load balancing</a>, and <a href="https://www.cloudflare.com/products/argo-smart-routing/">Argo Smart Routing</a>, which significantly improve API traffic speed. For web content, Cloudflare customers have always been able to <a href="https://www.cloudflare.com/cdn/">cache their web traffic</a>, serving requests from the closest data center and thereby reducing network round trip time and server processing time to a bare minimum. Now, we are leveraging these benefits to enhance API traffic in exciting new ways.</p><p>Today we’re announcing Ricochet for API Gateway, the easiest way for Cloudflare customers to achieve faster API responses. Customers using Cloudflare’s <a href="https://www.cloudflare.com/application-services/products/api-gateway/">API Gateway</a> will be able to enable Ricochet for their API endpoints and automatically reduce average latency through intelligent caching of API requests that would otherwise go to origin. Ricochet will even work for things you previously thought un-cacheable, like GraphQL POST requests. Best of all, there are no changes to make at your origin. Just configure API Gateway with your API session identifiers and leave the rest to us.</p><p>Enabling Ricochet for your APIs will cause Cloudflare to cache many of the basic, repetitive API calls from your applications and deliver them to users faster than ever. At first, your product metrics might even look broken with lower latency and fewer requests at origin. But these metrics will be a new sign of success, reflecting your app’s new speedy user experience.</p>
    <div>
      <h3>Why you should cache API responses</h3>
      <a href="#why-you-should-cache-api-responses">
        
      </a>
    </div>
    <p>It isn’t news that page load times directly correlate to dollar spend of site visitors. Organizations have spent the last decade obsessing over static content optimization to deliver websites quicker every year. Faster apps result in higher business metrics for most web sites. For example, <a href="https://www.cloudflare.com/case-studies/ted-baker/">faster sites receive more sales orders</a> and have <a href="https://www.cloudflare.com/case-studies/shopyy/">higher customer loyalty</a>. Faster sites are also <a href="https://www.cloudflare.com/case-studies/jcb/">critical for engagement</a> during marketing campaigns. Caching API requests will make your sites and apps faster by lowering the amount of time required to populate your app with data for your users.</p><p>The tools for caching APIs have always been available. But why isn’t it more common? We hypothesize a few reasons. It could be that API developers assume that APIs are too dynamic to cache, and that it only helps after lots of analysis of the application’s performance. It could also be that the security concerns around caching APIs are non-trivial. If both of those are true, you can imagine how caching APIs would only be successful with a large cross-organizational approach and lots of effort.</p><p>Let’s say your organization decided to try API caching anyway. We know there are a few problems if you want to cache APIs: First, traditional caching methods aren’t necessarily ready out of the box for caching APIs; cache invalidation needs to happen quickly and automatically. Second, special standalone cache tooling exists, but it doesn’t help you if it’s placed next to the origin and your users are globally distributed. Lastly, it’s hard to get security right when caching user data. It’s strictly forbidden to serve one user’s data to another on accident. Cloudflare has superpowers in these areas: knowledge of origin response time and existing cache-hit ratios, customer-configured API session IDs to establish secure user association with API requests, and the scale of our global network. We’re bringing together API Management with our robust caching infrastructure to safely and automatically cache API requests.</p>
    <div>
      <h3>Cloudflare’s unique approach</h3>
      <a href="#cloudflares-unique-approach">
        
      </a>
    </div>
    <p>The HTTP methods POST, PUT, and DELETE aren't generally cacheable. These methods are meant to change information at the origin on a one-time basis, and are therefore “non-safe”. If you responded to a non-safe request from cache, the data on the API server would not be updated. Compare this with “safe” HTTP methods: GET, OPTIONS, and HEAD. Caching requests with safe methods is straightforward as data at the origin does not change per-request.</p><p>But what do we know about RESTful APIs that can make caching easier? The endpoints usually stay the same when operating on objects, but the methods change. We will enable caching for safe methods and then automatically invalidate the cache when we see a non-safe method request for a RESTful endpoint managed by API Gateway. It’s also possible you have updates on one endpoint that change another endpoint’s data. In that event, we urge you to consider whether API Gateway’s short default TTL timers fit your use case by allowing a small delay between updating data at the origin and serving that update from cache. Check out the below diagram for an example of how automatic cache invalidation would work for shared paths with different methods:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3v6vFjigmfN5K4Ql6Q7Fsx/bfeb7bde6d1b4b757e094ca972f65517/pasted-image-0-4.png" />
            
            </figure><p>Even for safe requests, caching API data is risky when it comes to <a href="https://www.cloudflare.com/application-services/solutions/api-security/">security</a>. Done incorrectly, you could accidentally serve sensitive user data to the wrong person. That’s why Ricochet’s cache key includes the user’s API session identifier. This extra information in the cache key ensures that only an authorized user is able to receive their own cached data. For APIs without authentication, we hash the request parameters themselves and include that hash in the cache key, to ensure the correct data is returned for endpoints with static paths but variable inputs. Here’s an example for authenticated APIs:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4KNh6YT4kyImu2mhltAa2F/93e3234b03971febfb04ed0347524b89/How-is-Speed-boost-different---Anonymous--1-.png" />
            
            </figure><p>And here’s an example for anonymous APIs, where we use a hash of the request body to preserve privacy and still enable unique, useful cache keys:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7ihfmkMaM5efmRbaUxujGT/e0c268ed225ac5f31a329abcd55ba9d1/How-is-Speed-boost-different---Authenticated-1.png" />
            
            </figure>
    <div>
      <h3>APIs can be ripe for caching</h3>
      <a href="#apis-can-be-ripe-for-caching">
        
      </a>
    </div>
    <p>There are many API caching use cases out there, and we decided to start with two where our customers have asked us for help so far: mixed-authentication APIs where returning the correct data is critical, and APIs that have single endpoints that can return varied query results (think RESTful endpoints with variable inputs and GraphQL POST requests). These use cases include things like weather forecasts and current conditions, airline flight tracking and flight status, live sports scores, and collaborative tools with many users.</p><p>Even short cache control timers can be beneficial to reduce load at the origin and speed up responses. Consider an example of a popular public endpoint receiving 1,000 requests/second, or 60,000 requests/min at origin. Let’s assume the data at the origin changes unpredictably but not due to unique user interaction. For this use case, reporting stale data for a few seconds or even a minute could be acceptable, and most users wouldn’t know or mind the difference. You could set your cache control to a very low 1 second and serve 999 requests/second from cache. That would reduce the origin requests to only 60 requests/minute!</p><p>This is a simple example, and we urge you to think about your API and the potential performance improvements caching could bring.</p>
    <div>
      <h3>Potential impact of caching APIs</h3>
      <a href="#potential-impact-of-caching-apis">
        
      </a>
    </div>
    <p>We profiled five top global airline website APIs for flight status checks and compared their retrieval time against the airline logo’s retrieval time. Here are the results:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7uGhMnkmmhYAmxzga68MCo/36f4d84c9fcb83ef8372df674600180e/image2-33.png" />
            
            </figure><p>All five airlines saw on average a ~7x slow down for data that could easily be cached!</p><p>Successful caching will also lower load on your API origin. The hidden benefit with lower load at origin means faster responses from the requests that <i>miss</i> the cache and <i>do</i> end up hitting origin. So it’s two-for-the-price-of-one and latency decreases all-around. We aren’t going to reinvent your API overnight, but we are going to make a difference in your application’s response times by making it easy to add caching to your APIs.</p>
    <div>
      <h3>Conclusion</h3>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>We're launching Ricochet in 2024. It’s going to make a measurable difference speeding up your APIs, and the best part is that as an API Gateway customer it will be easy to get started without requiring tons of your team’s time. <a href="https://www.cloudflare.com/lp/cloudflare-ricochet/">Let us know</a> if you’d like to be on our waitlist for this feature. Our goal is to increase the amount of API caching on the Internet so that we can all benefit from faster response times and snappier apps.</p>
    <div>
      <h3>Watch on Cloudflare TV</h3>
      <a href="#watch-on-cloudflare-tv">
        
      </a>
    </div>
    <div></div> ]]></content:encoded>
            <category><![CDATA[Speed Week]]></category>
            <guid isPermaLink="false">66u1NGYMawEaBBkDyez585</guid>
            <dc:creator>John Cosgrove</dc:creator>
            <dc:creator>Maxime Guerreiro</dc:creator>
        </item>
        <item>
            <title><![CDATA[Announcing Turnstile, a user-friendly, privacy-preserving alternative to CAPTCHA]]></title>
            <link>https://blog.cloudflare.com/turnstile-private-captcha-alternative/</link>
            <pubDate>Wed, 28 Sep 2022 13:01:00 GMT</pubDate>
            <description><![CDATA[ Any website can use a simple API to replace CAPTCHAs with our invisible alternative, whether they’re on the Cloudflare network or not. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Today, we’re announcing the open beta of Turnstile, an invisible <a href="https://www.cloudflare.com/products/turnstile/">alternative to CAPTCHA</a>. Anyone, anywhere on the Internet, who wants to replace CAPTCHA on their site will be able to call a simple API, without having to be a Cloudflare customer or sending traffic through the Cloudflare global network. <a href="http://www.cloudflare.com/lp/turnstile/">Sign up here for free</a>.</p><p>There is no point in rehashing the fact that CAPTCHA provides a terrible user experience. It's been discussed in detail before <a href="/moving-from-recaptcha-to-hcaptcha/">on this blog</a>, and countless times elsewhere. The creator of the CAPTCHA has even publicly lamented that he “unwittingly created a system that was <a href="https://thewalrus.ca/human-resources/">frittering away, in ten-second increments, millions of hours</a> of a most precious resource: human brain cycles.” We hate it, you hate it, everyone hates it. Today we’re giving everyone a better option.</p><div></div><p>Turnstile is our smart CAPTCHA alternative. It automatically chooses from a rotating suite of non-intrusive browser challenges based on telemetry and client behavior exhibited during a session. We talked in an earlier post about how we’ve <a href="/end-cloudflare-captcha/">used our Managed Challenge system to reduce our use of CAPTCHA by 91%</a>. Now anyone can take advantage of this same technology to stop using CAPTCHA on their own site.</p>
    <div>
      <h3>UX isn’t the only big problem with CAPTCHA — so is privacy</h3>
      <a href="#ux-isnt-the-only-big-problem-with-captcha-so-is-privacy">
        
      </a>
    </div>
    <p>While having to solve a CAPTCHA is a frustrating user experience, there is also a potential hidden tradeoff a website must make when using CAPTCHA. If you are a small site using CAPTCHA today, you essentially have one option: an 800 pound gorilla with <a href="https://trends.builtwith.com/widgets/captcha">98% of the CAPTCHA</a> market share. This tool is free to use, but in fact it has a privacy cost: you have to give your data to an ad sales company.</p><p>According to security researchers, one of the signals that Google uses to decide if you are malicious is whether you have a Google cookie in your browser, and if you have this cookie, Google <a href="https://web.archive.org/web/20220826231627/https://www.fastcompany.com/90369697/googles-new-recaptcha-has-a-dark-side">will give you a higher score</a>. Google says they don’t use this information for ad targeting, but at the end of the day, Google is an ad sales company. Meanwhile, at Cloudflare, we make money when customers choose us to <a href="https://www.cloudflare.com/security/">protect their websites</a> and make their services run better. It's a simple, direct relationship that perfectly aligns our incentives.</p>
    <div>
      <h3>Less data collection, more privacy, same security</h3>
      <a href="#less-data-collection-more-privacy-same-security">
        
      </a>
    </div>
    <p>In June, we announced an effort <a href="/eliminating-captchas-on-iphones-and-macs-using-new-standard/">with Apple to use Private Access Tokens</a>. Visitors using operating systems that support these tokens, including the upcoming versions of macOS or iOS, can now prove they’re human without completing a CAPTCHA or giving up personal data.</p><p>By collaborating with third parties like device manufacturers, who already have the data that would help us validate a device, we are able to abstract portions of the validation process, and confirm data without actually collecting, touching, or storing that data ourselves. Rather than interrogating a device directly, we ask the device vendor to do it for us.</p><p>Private Access Tokens are built directly into Turnstile. While Turnstile has to look at some session data (like headers, user agent, and browser characteristics) to validate users without challenging them, Private Access Tokens allow us to minimize data collection by asking Apple to validate the device for us. In addition, Turnstile never looks for <a href="https://www.cloudflare.com/learning/privacy/what-are-cookies/">cookies</a> (like a login cookie), or uses cookies to collect or store information of any kind. Cloudflare has a <a href="/next-generation-privacy-protocols/">long</a> track <a href="/announcing-the-results-of-the-1-1-1-1-public-dns-resolver-privacy-examination/">record</a> of <a href="/certifying-our-commitment-to-your-right-to-information-privacy/">investing</a> in <a href="/zaraz-privacy-features-in-response-to-cnil/">user privacy</a>, which we will continue with Turnstile.</p>
    <div>
      <h3>We are opening our CAPTCHA replacement to everyone</h3>
      <a href="#we-are-opening-our-captcha-replacement-to-everyone">
        
      </a>
    </div>
    <p>To improve the Internet for everyone, we decided to open up the technology that powers our <a href="/end-cloudflare-captcha/">Managed Challenge</a> to everyone in beta as a standalone product called Turnstile.</p><p>Rather than try to unilaterally deprecate and replace CAPTCHA with a single alternative, we built a platform to test many alternatives and rotate new challenges in and out as they become more or less effective. With Turnstile, we adapt the actual challenge outcome to the individual visitor/browser. First we run a series of small non-interactive JavaScript challenges gathering more signals about the visitor/browser environment. Those challenges include proof-of-work, proof-of-space, probing for web APIs, and various other challenges for detecting browser-quirks and human behavior. As a result, we can fine-tune the difficulty of the challenge to the specific request.</p><p>Turnstile also includes <a href="https://www.cloudflare.com/learning/ai/what-is-machine-learning/">machine learning models</a> that detect common features of end visitors who were able to pass a challenge before. The computational hardness of those initial challenges may vary by visitor, but is targeted to run fast.</p>
    <div>
      <h3>Swap out your existing CAPTCHA in a few minutes</h3>
      <a href="#swap-out-your-existing-captcha-in-a-few-minutes">
        
      </a>
    </div>
    <p>You can take advantage of Turnstile and stop bothering your visitors with a CAPTCHA even without being on the <a href="https://www.cloudflare.com/network/">Cloudflare network</a>. While we make it as easy as possible to use our network, we don't want this to be a barrier to improving privacy and user experience.</p><p>To switch from a CAPTCHA service, all you need to do is:</p><ol><li><p><a href="https://dash.cloudflare.com/?to=/:account/turnstile">Create a Cloudflare account</a>, navigate to the `Turnstile` tab on the navigation bar, and get a sitekey and secret key.</p></li><li><p>Copy our JavaScript from the dashboard and paste over your old CAPTCHA JavaScript.</p></li><li><p>Update the server-side integration by replacing the old siteverify URL with ours.</p></li></ol><p>There is more detail on the process below, including options you can configure, but that’s really it. We’re excited about the simplicity of making a change.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2o1JdkC5Dh44zULVVl4ktw/0ebbef92b61e7f1707232f06997be24e/image2-55.png" />
            
            </figure>
    <div>
      <h3>Deployment options and analytics</h3>
      <a href="#deployment-options-and-analytics">
        
      </a>
    </div>
    <p>To use Turnstile, first create an account and get your site and secret keys.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3FAcI6beB4iWixsqmoJmeQ/05817ed2836d5aec236250669111f0d8/image3-39.png" />
            
            </figure><p>Then, copy and paste our HTML snippet:</p><p><code>&lt;script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer&gt;&lt;/script&gt;</code></p><p>Once the script is embedded, you can use implicit rendering. Here, the HTML is scanned for elements that have a <code>cf-turnstile</code> class:</p>
            <pre><code>&lt;form action="/login" method="POST"&gt;
  &lt;div class="cf-turnstile" data-sitekey="yourSiteKey"&gt;&lt;/div&gt;
  &lt;input type="submit"&gt;
&lt;/form&gt;</code></pre>
            <p>Once a challenge has been solved, a token is injected in your form, with the name <code>cf-turnstile-response</code>. This token can be used with our <code>siteverify</code> endpoint to validate a challenge response. A token can only be validated once, and a token cannot be redeemed twice. The validation can be done on the server side or even in the cloud, for <a href="https://demo.turnstile.workers.dev/">example</a> using a simple Workers fetch (<a href="https://github.com/cloudflare/turnstile-demo-workers">see a demo here</a>):</p>
            <pre><code>async function handleRequest() {
    // ... Receive token
    let formData = new FormData();
    formData.append('secret', turnstileISecretKey);
    formData.append('response', receivedToken);
 
    await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify',
        {
            body: formData,
            method: 'POST'
        });
    // ...
}</code></pre>
            <p>For more complex use cases, the challenge can be invoked explicitly via JavaScript:</p>
            <pre><code>&lt;script&gt;
    window.turnstileCallbackFunction = function () {
        const turnstileOptions = {
            sitekey: 'yourSitekey',
            callback: function(token) {
                console.log(`Challenge Success: ${token}`);
            }
        };
        turnstile.render('#container', turnstileOptions);
    };
&lt;/script&gt;
&lt;div id="container"&gt;&lt;/div&gt;</code></pre>
            <p>You can also create what we call 'Actions'. Custom labels that allow you to distinguish between different pages where you're using Turnstile, like a login, checkout, or account creation page.</p><p>Once you’ve deployed Turnstile, you can go back to the dashboard and see analytics on where you have widgets deployed, how users are solving them, and view any defined actions.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4wP8P97T96SukNsOdZ6pnn/eea084506bef00ee817db94750bde22a/image1-64.png" />
            
            </figure>
    <div>
      <h3>Why are we giving this away for free?</h3>
      <a href="#why-are-we-giving-this-away-for-free">
        
      </a>
    </div>
    <p>While this is sometimes hard for people outside to believe, helping build a better Internet truly is <a href="https://www.cloudflare.com/careers/people/#:~:text=%E2%80%9CCloudflare's%20mission%20is%20to%20help,quantum%20algorithms%20at%20Cloudflare%20scale.%E2%80%9D">our mission</a>. This isn’t the first time we’ve built <a href="/1111-warp-better-vpn/">free tools</a> that we think will <a href="/announcing-1111/">make the Internet better</a>, and it won’t be the last. It's really important to us.</p><p>So whether or not you’re a Cloudflare customer today, if you’re using a CAPTCHA, try Turnstile for free, instead. You’ll make your users happier, and minimize the data you send to third parties.</p><p>Visit <a href="http://www.cloudflare.com/lp/turnstile/">this page</a> to sign up for the best invisible, privacy-first, CAPTCHA replacement and to retrieve your Turnstile beta sitekey.</p><p>If you want to read more, refer to our <a href="https://developers.cloudflare.com/turnstile/">documentation</a>.</p><p>
</p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Turnstile]]></category>
            <category><![CDATA[CAPTCHA]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Bots]]></category>
            <category><![CDATA[Privacy]]></category>
            <category><![CDATA[Free]]></category>
            <guid isPermaLink="false">2EwI6qWhe8xClQaOJd1GP8</guid>
            <dc:creator>Reid Tatoris</dc:creator>
            <dc:creator>Benedikt Wolters</dc:creator>
            <dc:creator>Maxime Guerreiro</dc:creator>
            <dc:creator>Miguel de Moura</dc:creator>
        </item>
        <item>
            <title><![CDATA[Private Access Tokens: eliminating CAPTCHAs on iPhones and Macs with open standards]]></title>
            <link>https://blog.cloudflare.com/eliminating-captchas-on-iphones-and-macs-using-new-standard/</link>
            <pubDate>Wed, 08 Jun 2022 16:01:46 GMT</pubDate>
            <description><![CDATA[ Today we’re announcing Private Access Tokens, a completely invisible, private way to validate that real users are visiting your site ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1MXprIYDqrhnoQhWnQ9V5x/b7e3b0d906f122a54dbca8f3636de8d6/Private-Authentication-Token-open-source-standard-to-eliminate-CAPTCHAs.png" />
            
            </figure><p>Today we’re announcing Private Access Tokens, a completely invisible, private way to validate that real users are visiting your site. Visitors using operating systems that support these tokens, including <a href="https://developer.apple.com/wwdc22/10077">the upcoming versions of macOS or iOS</a>, can now prove they’re human without completing a CAPTCHA or giving up personal data. This will eliminate nearly 100% of CAPTCHAs served to these users.</p><p>What does this mean for you?</p><p>If you’re an Internet user:</p><ul><li><p>We’re making your mobile web experience more pleasant and more private than other networks at the same time.</p></li><li><p>You won’t see a CAPTCHA on a supported iOS or Mac device (other devices coming soon!) accessing the Cloudflare network.</p></li></ul><p>If you’re a web or application developer:</p><ul><li><p>Know your user is coming from an authentic device and signed application, verified by the device vendor directly.</p></li><li><p>Validate users without maintaining a cumbersome SDK.</p></li></ul><p>If you’re a Cloudflare customer:</p><ul><li><p>You don’t have to do anything!  Cloudflare will automatically ask for and utilize Private Access Tokens</p></li><li><p>Your visitors won’t see a CAPTCHA, and we’ll ask for less data from their devices.</p></li></ul>
    <div>
      <h3>Introducing Private Access Tokens</h3>
      <a href="#introducing-private-access-tokens">
        
      </a>
    </div>
    <p>Over the past year, Cloudflare has collaborated with Apple, Google, and other industry leaders to extend the <a href="https://www.ietf.org/archive/id/draft-ietf-privacypass-auth-scheme-01.html">Privacy Pass protocol</a> with support for a new cryptographic token. These tokens simplify application security for developers and security teams, and obsolete legacy, third-party SDK based approaches to determining if a human is using a device. They work for browsers, APIs called by browsers, and APIs called within apps. We call these new tokens Private Access Tokens (PATs). This morning, <a href="https://developer.apple.com/wwdc22/10077">Apple announced that PATs will be incorporated</a> into iOS 16, iPad 16, and macOS 13, and we expect additional vendors to announce support in the near future.</p><p>Cloudflare has already incorporated PATs into our <a href="/end-cloudflare-captcha/">Managed Challenge platform</a>, so any customer using this feature will automatically take advantage of this new technology to improve the browsing experience for supported devices.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2t6bhh7vQcRRbOVZheNgPH/53dcccd448967d62b28d7e4b77bbe376/image2-4.png" />
            
            </figure>
    <div>
      <h3>CAPTCHAs don’t work in mobile environments, PATs remove the need for them</h3>
      <a href="#captchas-dont-work-in-mobile-environments-pats-remove-the-need-for-them">
        
      </a>
    </div>
    <p>We’ve <a href="/end-cloudflare-captcha/">written</a> <a href="/introducing-cryptographic-attestation-of-personhood/">numerous</a> <a href="/moving-from-recaptcha-to-hcaptcha/">times</a> about how CAPTCHAs are a terrible user experience. However, we haven’t discussed specifically how much worse the user experience is on a mobile device. CAPTCHA as a technology was built and optimized for a browser-based world. They are deployed via a widget or iframe that is generally one size fits all, leading to rendering issues, or the input window only being partially visible on a device. The smaller real estate on mobile screens inherently makes the technology less accessible and solving any CAPTCHA more difficult, and the need to render JavaScript and image files slows down image loads while consuming excess customer bandwidth.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1nIPAH3gWctx5emjDD4Yp4/0f4843b09702b44e53e95aff6ca305ab/image5-2.png" />
            
            </figure><p>Usability aside, mobile environments present an additional challenge in that they are increasingly <a href="https://www.cloudflare.com/learning/security/api/what-is-an-api/">API-driven</a>. CAPTCHAs simply cannot work in an API environment where JavaScript can’t be rendered, or a WebView can’t be called. So, mobile app developers often have no easy option for challenging a user when necessary. They sometimes resort to using a clunky SDK to embed a CAPTCHA directly into an app. This requires work to embed and customize the CAPTCHA, continued maintenance and monitoring, and results in higher abandonment rates. For these reasons, when our customers choose to show a CAPTCHA today, it's only shown on mobile 20% of the time.</p><p>We recently posted about how we used our Managed Challenge platform to <a href="/end-cloudflare-captcha/">reduce our CAPTCHA use by 91%</a>. But because the CAPTCHA experience is so much worse on mobile, we’ve been separately working on ways we can specifically reduce CAPTCHA use on mobile even further.</p>
    <div>
      <h3>When sites can’t challenge a visitor, they collect more data</h3>
      <a href="#when-sites-cant-challenge-a-visitor-they-collect-more-data">
        
      </a>
    </div>
    <p>So, you either can’t use CAPTCHA to protect an API, or the UX is too terrible to use on your mobile website. What options are left for confirming whether a visitor is real? A common one is to look at client-specific data, commonly known as fingerprinting.</p><p>You could ask for device IMEI and security patch versions, look at screen sizes or fonts, check for the presence of APIs that indicate human behavior, like interactive touch screen events and compare those to expected outcomes for the stated client. However, all of this data collection is expensive and, ultimately, not respectful of the end user. As a company that deeply cares about privacy and helping make the Internet better, we want to use as little data as possible without compromising the security of the services we provide.</p><p>Another alternative is to use system-level APIs that offer device validation checks. This includes <a href="https://developer.apple.com/documentation/devicecheck">DeviceCheck</a> on Apple platforms and <a href="https://developer.android.com/training/safetynet/attestation">SafetyNet</a> on Android. <a href="https://www.cloudflare.com/application-services/">Application services</a> can use these client APIs with their own services to assert that the clients they’re communicating with are valid devices. However, adopting these APIs requires both application and server changes, and can be just as difficult to maintain as SDKs.</p>
    <div>
      <h3>Private Access Tokens vastly improve privacy by validating without fingerprinting</h3>
      <a href="#private-access-tokens-vastly-improve-privacy-by-validating-without-fingerprinting">
        
      </a>
    </div>
    <p>This is the most powerful aspect of PATs. By partnering with third parties like device manufacturers, who already have the data that would help us validate a device, we are able to abstract portions of the validation process, and confirm data <b><i>without actually collecting</i></b><i>, </i><b><i>touching, or storing that data ourselves</i></b>. Rather than interrogating a device directly, we ask the device vendor to do it for us.</p><p>In a traditional website setup, using the most common CAPTCHA provider:</p><ul><li><p>The website you visit knows the URL, your IP, and some additional user agent data.</p></li><li><p>The CAPTCHA provider knows what website you visit, your IP, your device information, collects interaction data on the page, AND ties this data back to other sites where they have seen you. This builds a profile of your browsing activity across both sites and devices, plus how you personally interact with a page.</p></li></ul>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2vnMi2aTbGheZegJ6jupiC/e7631b1b0b279ce7f8524cafcbc21ce7/Screen-Shot-2022-06-07-at-10.24.12-AM.png" />
            
            </figure><p>When PATs are used, device data is isolated and explicitly NOT exchanged between the involved parties (the manufacturer and Cloudflare)</p><ul><li><p>The website knows only your URL and IP, which it has to know to make a connection.</p></li><li><p>The device manufacturer (attester) knows only the device data required to attest your device, but can't tell what website you visited, and doesn’t know your IP.</p></li><li><p>Cloudflare knows the site you visited, but doesn’t know any of your device or interaction information.</p></li></ul>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6vRC2wIaTHgP8zLJ8EJIO5/f87537648020532a565a1636254685c2/image3-2.png" />
            
            </figure><p>We don’t actually need or want the underlying data that’s being collected for this process, we just want to verify if a visitor is faking their device or user agent. Private Access Tokens allow us to capture that validation state directly, without needing any of the underlying data. They allow us to be more confident in the authenticity of important signals, without having to look at those signals directly ourselves.</p>
    <div>
      <h3>How Private Access Tokens compartmentalize data</h3>
      <a href="#how-private-access-tokens-compartmentalize-data">
        
      </a>
    </div>
    <p>With <a href="https://www.ietf.org/archive/id/draft-ietf-privacypass-auth-scheme-01.html#name-security-considerations">Private Access Tokens</a>, four parties agree to work in concert with a common framework to generate and exchange anonymous, unforgeable tokens. Without all four parties in the process, PATs won’t work.</p><ol><li><p>An <b>Origin</b>. A website, application, or API that receives requests from a client. When a website receives a request to their origin, the origin must know to look for and request a token from the client making the request. For Cloudflare customers, Cloudflare acts as the origin (on behalf of customers) and handles the requesting and processing of tokens.</p></li><li><p>A <b>Client</b>. Whatever tool the visitor is using to attempt to access the Origin. This will usually be a web browser or mobile application. In our example, let’s say the client is a <a href="https://developer.apple.com/wwdc22/10077">mobile Safari Browser</a>.</p></li><li><p>An <b>Attester</b>. The Attester is who the client asks to prove something (i.e that a mobile device has a valid IMEI) before a token can be issued. In our example below, the Attester is Apple, the device vendor.</p></li><li><p>An <b>Issuer</b>. The issuer is the only one in the process that actually generates, or issues, a token. The Attester makes an API call to whatever Issuer the Origin has chosen to trust,  instructing the Issuer to produce a token. In our case, Cloudflare will also be the Issuer.</p></li></ol>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4ho7MHd8tHAhHpStG8ItWQ/51b3f08744f6ceb855fbb2fc4c623930/Screen-Shot-2022-06-07-at-2.01.38-PM.png" />
            
            </figure><p>In the example above, a visitor opens the Safari browser on their iPhone and tries to visit example.com.</p><ol><li><p>Since Example uses Cloudflare to host their Origin, Cloudflare will ask the browser for a token.</p></li><li><p>Safari supports PATs, so it will make an API call to Apple’s Attester, asking them to attest.</p></li><li><p>The Apple attester will check various device components, confirm they are valid, and then make an API call to the Cloudflare Issuer (since Cloudflare acting as an Origin chooses to use the Cloudflare Issuer).</p></li><li><p>The Cloudflare Issuer generates a token, sends it to the browser, which in turn sends it to the origin.</p></li><li><p>Cloudflare then receives the token, and uses it to determine that we don’t need to show this user a CAPTCHA.</p></li></ol><p>This probably sounds a bit complicated, but the best part is that <b><i>the website took no action</i></b> in this process. Asking for a token, validation, token generation, passing, all takes place behind the scenes by third parties that are invisible to both the user and the website. By working together, Apple and Cloudflare have just made this request more secure, reduced the data passed back and forth, and prevented a user from having to see a CAPTCHA. And we’ve done it by both collecting and exchanging less user data than we would have in the past.</p>
    <div>
      <h3>Most customers won’t have to do anything to utilize Private Access Tokens</h3>
      <a href="#most-customers-wont-have-to-do-anything-to-utilize-private-access-tokens">
        
      </a>
    </div>
    <p>To take advantage of PATs, all you have to do is choose Managed Challenge rather than Legacy CAPTCHA as a response option in a Firewall rule. More than 65% of Cloudflare customers are already doing this. Our Managed Challenge platform will automatically ask every request for a token, and when the client is compatible with Private Access Tokens, we’ll receive one. Any of your visitors using an iOS or macOS device will automatically start seeing fewer CAPTCHAs once they’ve upgraded their OS.</p><p>This is just step one for us. We are actively working to get other clients and device makers utilizing the PAT framework as well. Any time a new client begins utilizing the PAT framework, traffic coming to your site from that client will automatically start asking for tokens, and your visitors will automatically see fewer CAPTCHAs.</p><p>We will be incorporating PATs into other security products very soon. Stay tuned for some announcements in the near future.</p> ]]></content:encoded>
            <category><![CDATA[Product News]]></category>
            <category><![CDATA[Partners]]></category>
            <category><![CDATA[CAPTCHA]]></category>
            <category><![CDATA[Security]]></category>
            <guid isPermaLink="false">0uuhhCXz6zKtDutK7x0yh</guid>
            <dc:creator>Reid Tatoris</dc:creator>
            <dc:creator>Maxime Guerreiro</dc:creator>
        </item>
        <item>
            <title><![CDATA[Protecting Project Galileo websites from HTTP attacks]]></title>
            <link>https://blog.cloudflare.com/protecting-galileo-websites/</link>
            <pubDate>Thu, 13 Jun 2019 13:00:00 GMT</pubDate>
            <description><![CDATA[ Yesterday, we celebrated the fifth anniversary of Project Galileo. More than 550 websites are part of this program, and they have something in common: each and every one of them has been subject to attacks in the last month. ]]></description>
            <content:encoded><![CDATA[ <p>Yesterday, we celebrated the <a href="/project-galileo-fifth-anniversary/">fifth anniversary of Project Galileo</a>. More than 550 websites are part of this program, and they have something in common: each and every one of them has been subject to attacks in the last month. In this blog post, we will look at the security events we observed between the 23 April 2019 and 23 May 2019.</p><p>Project Galileo sites are protected by the Cloudflare Firewall and Advanced DDoS Protection which contain a number of features that can be used to detect and mitigate different types of attack and suspicious traffic. The following table shows how each of these features contributed to the protection of sites on Project Galileo.</p>
    <div>
      <h3>WAF (Web Application Firewall)</h3>
      <a href="#waf-web-application-firewall">
        
      </a>
    </div>
    <p>Although not the most impressive in terms of blocked requests, the <a href="https://www.cloudflare.com/learning/ddos/glossary/web-application-firewall-waf/">WAF</a> is the most interesting as it identifies and blocks malicious requests, based on heuristics and rules that are the result of seeing attacks across all of our customers and learning from those. The WAF is available to all of our paying customers, protecting them against 0-days, SQL/XSS exploits and more. For the Project Galileo customers the WAF rules blocked more than <b>4.5</b> million requests in the month that we looked at, matching over 130 WAF rules and approximately 150k requests per day.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/xeVZ4bwsq4aySUxpIdXkU/d97be07840a080be16f7cf6a8e65135c/AJxk6op83jW6A3LcLLhGJaGFaVpCsBd4ty_K_QhFcnW0_FKXEkJYV6bbIvg7DL-yOtWIfmvlEVChFTmGh8IMjywqn2adoBwb8fmY6-Birvpx43kAgzsjwqx2YmAX.png" />
            
            </figure><p>Heat map showing the attacks seen on customer sites (rows) per day (columns)</p><p>This heat map may initially appear confusing but reading one is easy once you know what to expect so bear with us! It is a table where each line is a website on Project Galileo and each column is a day. The color represents the number of requests triggering WAF rules - on a scale from 0 (white) to a lot (dark red). The darker the cell, the more requests were blocked on this day.</p><p>We observe malicious traffic on a daily basis for most websites we protect. The average Project Galileo site saw malicious traffic for 27 days in the 1 month observed, and for almost 60% of the sites we noticed daily events.</p><p>Fortunately, the vast majority of websites only receive a few malicious requests per day, likely from automated scanners. In some cases, we notice a net increase in attacks against some websites - and a few websites are under a constant influx of attacks.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3jspr63m1ZPzhccip8JViU/2d3bdf2c382b12ecf60bb107079a0fb3/KaFgtLheT89hQ073frYp-5DBiBPAESZ93t6FIPYz8t0oo02omlH8sugpKIGJA847c8jh2O0iErKU61Vuf06IAeCNQWn8TT-eETZu-SkgIYCl98GtxVCEqC0hIPWf.png" />
            
            </figure><p>Heat map showing the attacks blocked for each WAF rule (rows) per day (columns)</p><p>This heat map shows the WAF rules that blocked requests by day. At first, it seems some rules are useless as they never match malicious requests, but this plot makes it obvious that some attack vectors become active all of a sudden (isolated dark cells). This is especially true for 0-days, malicious traffic starts once an exploit is published and is very active on the first few days. The dark active lines are the most common malicious requests, and these WAF rules protect against things like <a href="https://www.cloudflare.com/learning/security/how-to-prevent-xss-attacks/">XSS</a> and SQL injection attacks.</p>
    <div>
      <h3>DoS (Denial of Service)</h3>
      <a href="#dos-denial-of-service">
        
      </a>
    </div>
    <p>A <a href="https://www.cloudflare.com/learning/ddos/ddos-mitigation/"><b>DoS</b></a> attack prevents legitimate visitors from accessing a website by flooding it with bad traffic.  Due to the way Cloudflare works, websites protected by Cloudflare are immune to many DoS vectors, out of the box. We block layer 3 and 4 attacks, which includes SYN floods and UDP amplifications. DNS nameservers, often described as the Internet’s phone book, are fully managed by Cloudflare, and protected - visitors know how to reach the websites.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7dkARodmacrTw5PrQla5Oy/f9ee8f84538a7af737977fd3f002764b/QKswAfRZDj8yH9Q6c6sWB0x-KokAOFijKoFRwT6lsE9JYmc6hR9SbVgkvjRdbATfczLZ5ZPLtRzZMEuwximdwmKgPgH7Gno9GHZWL27VX3xSPY0CMI7JRCxLe9M.jpeg" />
            
            </figure><p>Line plot - requests per second to a website under DoS attack</p><p>Can you spot the attack?</p><p>As for layer 7 attacks (for instance, HTTP floods), we rely on Gatebot, an automated tool to detect, analyse and block DoS attacks, so you can sleep. The graph shows the requests per second we received on a zone, and whether or not it reached the origin server. As you can see, the bad traffic was identified automatically by Gatebot, and more than 1.6 million requests were blocked as a result.</p>
    <div>
      <h3>Firewall Rules</h3>
      <a href="#firewall-rules">
        
      </a>
    </div>
    <p>For websites with specific requirements we provide tools to allow customers to block traffic to precisely fit their needs. Customers can easily implement complex logic using Firewall Rules to filter out specific chunks of traffic, block IPs / Networks / Countries using Access Rules and Project Galileo sites have done just that. Let’s see a few examples.</p><p><a href="/announcing-firewall-rules/"><b>Firewall Rules</b></a> allows website owners to challenge or block as much or as little traffic as they desire, and this can be done as a surgical tool “block just this request” or as a general tool “challenge every request”.</p><p>For instance, a well-known website used <b>Firewall Rules</b> to prevent twenty IPs from fetching specific pages. 3 of these IPs were then used to send a total of 4.5 million requests over a short period of time, and the following chart shows the requests seen for this website. When this happened Cloudflare, mitigated the traffic ensuring that the website remains available.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1QX05tYEJtJONlXhXLT4Rd/0b481c7b58a8101bd588801ab96b6b7f/vO5ctEREt3GkkAHbKc3YGsP52-1_G0BEFUgcjL7pvlYGwkjHv5xm5X6QI3yD84bBlArh7hjI-CI2qWZ-pU-DBsF0gBXBMjA0YcLfMVcc2gG__20xRKI86ObNvfjS.png" />
            
            </figure><p>Cumulative line plot. Requests per second to a website</p><p>Another website, built with WordPress, is using Cloudflare to cache their webpages. As POST requests are not cacheable, they always hit the origin machine and increase load on the origin server - that’s why this website is using firewall rules to block POST requests, except on their administration backend. Smart!</p><p>Website owners can also deny or challenge requests based on the visitor’s IP address, Autonomous System Number (ASN) or Country. Dubbed <a href="https://support.cloudflare.com/hc/en-us/articles/217074967-Configuring-IP-Access-Rules"><b>Access Rules</b></a>, it is enforced on all pages of a website - hassle-free.</p><p>For example, a news website is using Cloudflare’s Access Rules to challenge visitors from countries outside of their geographic region who are accessing their website. We enforce the rules globally even for cached resources, and take care of GeoIP database updates for them, so they don’t have to.</p><p>The <a href="https://support.cloudflare.com/hc/en-us/articles/115001595131-How-do-I-Lockdown-URLs-in-Cloudflare-"><b>Zone Lockdown</b></a> utility restricts a specific URL to specific IP addresses. This is useful to protect an internal but public path being accessed by external IP addresses. A non-profit based in the United Kingdom is using Zone Lockdown to restrict access to their WordPress’ admin panel and login page, hardening their website without relying on non official plugins. Although it does not prevent very sophisticated attacks, it shields them against automated attacks and phishing attempts - as even if their credentials are stolen, they can’t be used as easily.</p>
    <div>
      <h3>Rate Limiting</h3>
      <a href="#rate-limiting">
        
      </a>
    </div>
    <p>Cloudflare acts as a CDN, caching resources and happily serving them, reducing bandwidth used by the origin server … and indirectly the costs. Unfortunately, not all requests can be cached and some requests are very expensive to handle. Malicious users may abuse this to increase load on the server, and website owners can rely on our <a href="https://support.cloudflare.com/hc/en-us/articles/235240767-Cloudflare-Rate-Limiting"><b>Rate Limit</b></a> to help them: they define thresholds, expressed in requests over a time span, and we make sure to enforce this threshold. A non-profit fighting against poverty relies on rate limits to protect their donation page, and we are glad to help!</p>
    <div>
      <h3>Security Level</h3>
      <a href="#security-level">
        
      </a>
    </div>
    <p>Last but not least, one of Cloudflare’s greatest assets is our threat intelligence. With such a wide lens of the threat landscape, Cloudflare uses our Firewall data, combined with machine learning to curate our IP Reputation databases. This data is provided to all Cloudflare customers, and is configured through our <b>Security Level</b> feature. Customers then may define their threshold sensitivity, ranging  from <b>Essentially Off</b> to <b>I’m Under Attack</b>. For every incoming request, we ask visitors to complete a challenge if the score is above a customer defined threshold. This system alone is responsible for 25% of the requests we mitigated: it’s extremely easy to use, and it constantly learns from the other protections.</p>
    <div>
      <h3>Conclusion</h3>
      <a href="#conclusion">
        
      </a>
    </div>
    <p>When taken together, the Cloudflare Firewall features provide our Project Galileo customers comprehensive and effective security that enables them to ensure their important work is available. The majority of security events were handled automatically, and this is our strength - security that is always on, always available, always learning.</p> ]]></content:encoded>
            <category><![CDATA[Project Galileo]]></category>
            <category><![CDATA[Firewall]]></category>
            <category><![CDATA[DDoS]]></category>
            <category><![CDATA[Attacks]]></category>
            <category><![CDATA[Security]]></category>
            <category><![CDATA[Speed & Reliability]]></category>
            <guid isPermaLink="false">kOHvUGZUIed1rVROWYqvt</guid>
            <dc:creator>Maxime Guerreiro</dc:creator>
        </item>
    </channel>
</rss>