Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when reviewing public HTML forms (no authentication required to reach them) for bot and abuse protection mechanisms.
.claude/skills/thedaviddias-form-captcha/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 12% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 10% | 0% |
| case-06 | ✓→✓ | = Same ✓ | 9% | 0% |
| case-16 | ✓→✓ | = Same ✓ | -3% | 0% |
| case-17 | ✓→✓ | = Same ✓ | -21% | 0% |
An unprotected registration form can create thousands of spam accounts per minute; an unprotected login form enables credential stuffing attacks that test millions of username/password combinations from data breaches.
Identify all public-facing forms (contact, registration, login, password reset, newsletter, comment). Check whether each has CAPTCHA, honeypot fields, or server-side rate limiting. Verify any CAPTCHA tokens are validated server-side.
Integrate a CAPTCHA service (Cloudflare Turnstile, hCaptcha, or Google reCAPTCHA v3) on all public forms. Validate the CAPTCHA response token on your server before processing the form submission. Add rate limiting as a defense-in-depth measure.
Explain what credential stuffing and spam bot attacks are, how CAPTCHA protects public forms, the trade-offs between different CAPTCHA approaches (v2 checkbox, v3 invisible, Turnstile), and why server-side validation is required.
Review server config, headers, forms, and integration points related to Protect public forms with CAPTCHA. Flag exact responses, cookies, or browser behaviors that violate the rule, and verify them against the effective production-like response.
For full implementation details, code examples, and framework-specific guidance, see references/rule.md.
Rule page: https://frontendchecklist.io/en/rules/security/form-captcha
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→pass | 9,936 | 7,662 | -23% | 1 | 1 | 0% | 1,841 | 2,022 | +10% | 0 | 0 | — |
case-06 | pass→pass | 13,080 | 11,838 | -9% | 1 | 1 | 0% | 2,846 | 3,100 | +9% | 0 | 0 | — |
case-16 | pass→pass | 14,369 | 4,746 | -67% | 1 | 1 | 0% | 1,399 | 1,355 | -3% | 0 | 0 | — |
case-17 | pass→pass | 11,636 | 8,038 | -31% | 1 | 1 | 0% | 2,163 | 1,705 | -21% | 0 | 0 | — |
case-02 | pass→pass | 11,451 | 11,210 | -2% | 1 | 1 | 0% | 2,466 | 3,018 | +22% | 0 | 0 | — |
case-03 | pass→pass | 12,076 | 10,703 | -11% | 1 | 1 | 0% | 2,353 | 2,367 | +1% | 0 | 0 | — |
case-04 | pass→pass | 11,258 | 9,360 | -17% | 1 | 1 | 0% | 2,028 | 2,292 | +13% | 0 | 0 | — |
case-05 | fail→pass | 13,050 | 11,674 | -11% | 1 | 1 | 0% | 2,292 | 2,556 | +12% | 0 | 0 | — |
case-07 | pass→pass | 14,232 | 11,491 | -19% | 1 | 1 | 0% | 2,598 | 2,547 | -2% | 0 | 0 | — |
case-08 | pass→pass | 12,054 | 7,768 | -36% | 1 | 1 | 0% | 3,056 | 2,318 | -24% | 0 | 0 | — |
case-09 | pass→pass | 11,857 | 8,689 | -27% | 1 | 1 | 0% | 2,278 | 2,145 | -6% | 0 | 0 | — |
case-10 | pass→pass | 10,744 | 8,577 | -20% | 1 | 1 | 0% | 2,168 | 2,202 | +2% | 0 | 0 | — |
case-11 | pass→pass | 12,332 | 9,719 | -21% | 1 | 1 | 0% | 2,176 | 2,648 | +22% | 0 | 0 | — |
case-12 | pass→pass | 10,513 | 7,457 | -29% | 1 | 1 | 0% | 2,232 | 2,013 | -10% | 0 | 0 | — |
case-13 | pass→pass | 15,037 | 11,510 | -23% | 1 | 1 | 0% | 2,717 | 2,952 | +9% | 0 | 0 | — |
case-14 | pass→pass | 8,209 | 9,398 | +14% | 1 | 1 | 0% | 1,545 | 2,367 | +53% | 0 | 0 | — |
case-15 | pass→pass | 18,431 | 15,409 | -16% | 1 | 1 | 0% | 1,843 | 2,345 | +27% | 0 | 0 | — |
case-18 | pass→pass | 13,815 | 9,189 | -33% | 1 | 1 | 0% | 2,506 | 2,223 | -11% | 0 | 0 | — |
case-19 | pass→pass | 13,264 | 11,839 | -11% | 1 | 1 | 0% | 2,490 | 3,018 | +21% | 0 | 0 | — |
case-20 | pass→pass | 11,624 | 9,695 | -17% | 1 | 1 | 0% | 2,161 | 1,875 | -13% | 0 | 0 | — |
case-21 | pass→pass | 11,283 | 8,465 | -25% | 1 | 1 | 0% | 2,046 | 1,986 | -3% | 0 | 0 | — |
case-22 | pass→pass | 13,104 | 11,384 | -13% | 1 | 1 | 0% | 2,804 | 2,818 | +0% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +5 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.