<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: captchas</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/captchas.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2026-06-16T00:21:36+00:00</updated><author><name>Simon Willison</name></author><entry><title>Cloudflare CAPTCHA on at least one ampersand</title><link href="https://simonwillison.net/2026/Jun/16/captcha-on-at-least-one-ampersand/#atom-tag" rel="alternate"/><published>2026-06-16T00:21:36+00:00</published><updated>2026-06-16T00:21:36+00:00</updated><id>https://simonwillison.net/2026/Jun/16/captcha-on-at-least-one-ampersand/#atom-tag</id><summary type="html">
    
        &lt;p&gt;&lt;strong&gt;TIL:&lt;/strong&gt; &lt;a href="https://til.simonwillison.net/cloudflare/captcha-on-at-least-one-ampersand"&gt;Cloudflare CAPTCHA on at least one ampersand&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;I'm using Cloudflare's CAPTCHA (they call it a "Web Application Firewall &amp;gt; Custom rules &amp;gt; Managed Challenge" these days) to prevent crawlers from aggresively spidering my &lt;a href="https://simonwillison.net/2017/Oct/5/django-postgresql-faceted-search/"&gt;faceted search engine&lt;/a&gt; on this site, but I got fed up of even simple &lt;code&gt;?q=term&lt;/code&gt; searches triggering the challenge.&lt;/p&gt;
&lt;p&gt;After some mucking around with Claude Code it turns out you can register the following rule instead, so the CAPTCHA only kicks in for search URLs containing at least one ampersand:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;(http.request.uri.path wildcard r"/search/*" and http.request.uri.query contains "&amp;amp;")&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And now &lt;a href="https://simonwillison.net/search/?q=lemur"&gt;/search/?q=lemur&lt;/a&gt; works without triggering a CAPTCHA!&lt;/p&gt;
&lt;p&gt;Also included: notes on &lt;a href="https://til.simonwillison.net/cloudflare/captcha-on-at-least-one-ampersand#trying-the-cloudflare-mcp"&gt;trying out the Cloudflare MCP with Claude Code&lt;/a&gt;, though it turned out not to be able to edit the rules in question so I had Claude Code &lt;a href="https://til.simonwillison.net/cloudflare/captcha-on-at-least-one-ampersand#using-the-api-instead"&gt;switch to the Cloudflare API&lt;/a&gt; instead.&lt;/p&gt;
    
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cloudflare"&gt;cloudflare&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/model-context-protocol"&gt;model-context-protocol&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/claude-code"&gt;claude-code&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="captchas"/><category term="cloudflare"/><category term="model-context-protocol"/><category term="claude-code"/></entry><entry><title>moot wins, Time Inc. loses</title><link href="https://simonwillison.net/2009/Apr/29/moot/#atom-tag" rel="alternate"/><published>2009-04-29T11:13:40+00:00</published><updated>2009-04-29T11:13:40+00:00</updated><id>https://simonwillison.net/2009/Apr/29/moot/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://musicmachinery.com/2009/04/27/moot-wins-time-inc-loses/"&gt;moot wins, Time Inc. loses&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The Time.com poll hack was more sophisticated than I first thought... Time implemented reCAPTCHA half way through the voting period, but the 4chan community fought back with a custom interface that crowdsourced the job of voting and let individuals submit up to 30 votes a minute.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/4chan"&gt;4chan&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/moot"&gt;moot&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/onlinepolls"&gt;onlinepolls&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recaptcha"&gt;recaptcha&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/timedotcom"&gt;timedotcom&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/voting"&gt;voting&lt;/a&gt;&lt;/p&gt;



</summary><category term="4chan"/><category term="captchas"/><category term="moot"/><category term="onlinepolls"/><category term="recaptcha"/><category term="security"/><category term="timedotcom"/><category term="voting"/></entry><entry><title>OCR and Neural Nets in JavaScript</title><link href="https://simonwillison.net/2009/Jan/25/ocr/#atom-tag" rel="alternate"/><published>2009-01-25T00:00:28+00:00</published><updated>2009-01-25T00:00:28+00:00</updated><id>https://simonwillison.net/2009/Jan/25/ocr/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://ejohn.org/blog/ocr-and-neural-nets-in-javascript/"&gt;OCR and Neural Nets in JavaScript&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
John dissects the brilliant Greasemonkey script that solves simple captchas using the canvas element and HTML5’s getImageData API.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/canvas"&gt;canvas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/getimagedata"&gt;getimagedata&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/greasemonkey"&gt;greasemonkey&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/john-resig"&gt;john-resig&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ocr"&gt;ocr&lt;/a&gt;&lt;/p&gt;



</summary><category term="canvas"/><category term="captchas"/><category term="getimagedata"/><category term="greasemonkey"/><category term="javascript"/><category term="john-resig"/><category term="ocr"/></entry><entry><title>Quoting Tim Anderson</title><link href="https://simonwillison.net/2008/Aug/29/captcha/#atom-tag" rel="alternate"/><published>2008-08-29T10:01:32+00:00</published><updated>2008-08-29T10:01:32+00:00</updated><id>https://simonwillison.net/2008/Aug/29/captcha/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://www.guardian.co.uk/technology/2008/aug/28/internet.captcha"&gt;&lt;p&gt;New authentication schemes such as OpenID, or Microsoft's CardSpace, may help as adoption increases. These systems make it possible to register for one site using credentials verified by another. Instead of having many sites with poor verification procedures, the internet could have a few sites with strong verification procedures, that are then used by others. The advantage for the user is that they no longer have to jump through multiple hoops for each new site they encounter.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://www.guardian.co.uk/technology/2008/aug/28/internet.captcha"&gt;Tim Anderson&lt;/a&gt;, in the Guardian&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/cardspace"&gt;cardspace&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/guardian"&gt;guardian&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openid"&gt;openid&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tim-anderson"&gt;tim-anderson&lt;/a&gt;&lt;/p&gt;



</summary><category term="captchas"/><category term="cardspace"/><category term="guardian"/><category term="openid"/><category term="security"/><category term="tim-anderson"/></entry><entry><title>Integrating reCAPTCHA with Django</title><link href="https://simonwillison.net/2008/Mar/19/recaptcha/#atom-tag" rel="alternate"/><published>2008-03-19T09:41:37+00:00</published><updated>2008-03-19T09:41:37+00:00</updated><id>https://simonwillison.net/2008/Mar/19/recaptcha/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://seeknuance.com/2008/03/18/integrating-recaptcha-with-django/"&gt;Integrating reCAPTCHA with Django&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Looks pretty straight forward.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recaptcha"&gt;recaptcha&lt;/a&gt;&lt;/p&gt;



</summary><category term="captchas"/><category term="django"/><category term="python"/><category term="recaptcha"/></entry><entry><title>The NHL's All-Star voting disaster</title><link href="https://simonwillison.net/2007/Jan/19/nhl/#atom-tag" rel="alternate"/><published>2007-01-19T09:50:17+00:00</published><updated>2007-01-19T09:50:17+00:00</updated><id>https://simonwillison.net/2007/Jan/19/nhl/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.slate.com/id/2157741"&gt;The NHL&amp;#x27;s All-Star voting disaster&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The NHL ran an online poll to decide which players are picked for their All-Star Game. The only authentication was a poorly implemented CAPTCHA. Unsurprisingly, it got gamed.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gaming"&gt;gaming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nhl"&gt;nhl&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/stupid"&gt;stupid&lt;/a&gt;&lt;/p&gt;



</summary><category term="captchas"/><category term="gaming"/><category term="nhl"/><category term="security"/><category term="stupid"/></entry><entry><title>botbouncer.com</title><link href="https://simonwillison.net/2006/Dec/19/botbouncer/#atom-tag" rel="alternate"/><published>2006-12-19T18:01:50+00:00</published><updated>2006-12-19T18:01:50+00:00</updated><id>https://simonwillison.net/2006/Dec/19/botbouncer/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://botbouncer.com/"&gt;botbouncer.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Neat concept: a third party service for ensuring that an OpenID has passed a CAPTCHA.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://blog.janrain.com/2006/12/01/announcing-botbouncercom/"&gt;JanRain Blog&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/janrain"&gt;janrain&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/openid"&gt;openid&lt;/a&gt;&lt;/p&gt;



</summary><category term="captchas"/><category term="janrain"/><category term="openid"/></entry><entry><title>RSS CAPTCHA Prototype</title><link href="https://simonwillison.net/2006/Aug/24/rss/#atom-tag" rel="alternate"/><published>2006-08-24T19:01:42+00:00</published><updated>2006-08-24T19:01:42+00:00</updated><id>https://simonwillison.net/2006/Aug/24/rss/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://kentbrewster.com/rss-captcha-prototype"&gt;RSS CAPTCHA Prototype&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Accessible captchas based on RSS feeds from friends’ sites.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;&lt;/p&gt;



</summary><category term="captchas"/></entry><entry><title>Solving and creating captchas with free porn</title><link href="https://simonwillison.net/2004/Jan/28/solving/#atom-tag" rel="alternate"/><published>2004-01-28T08:37:35+00:00</published><updated>2004-01-28T08:37:35+00:00</updated><id>https://simonwillison.net/2004/Jan/28/solving/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.boingboing.net/2004/01/27/solving-and-creating.html"&gt;Solving and creating captchas with free porn&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
More spammer ingenuity


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/captchas"&gt;captchas&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/spammers"&gt;spammers&lt;/a&gt;&lt;/p&gt;



</summary><category term="captchas"/><category term="spammers"/></entry></feed>