← Recipes

阅读中文版本

Challenge Suspected Abuse Instead of Blocking

When traffic looks automated, return a lightweight challenge or require stronger proof instead of a hard block, so real users are not locked out.

~45 minsecurityanti-abusereliability

Task

Add a graduated response to abusive traffic that separates bots from legitimate users.

When to use this

A hard IP block stops an attack but also blocks shared NAT users, so the fix breaks real customers while bots rotate addresses.

Prerequisites

  • Request scoring or a bot signal
  • A challenge mechanism such as a proof-of-work or CAPTCHA

Steps

1. Score requests by signals such as rate, user agent, and behavior.

Expected output: Suspicious traffic is identified before blocking.

2. For medium scores, serve a challenge that real users pass transparently.

Expected output: Legitimate users are not blocked outright.

3. For high scores, require authentication or temporarily throttle the identity.

Expected output: Abuse is slowed without a blanket block.

4. Log and review challenges so thresholds can be tuned from data.

curl -s https://api.example.com/login -H "User-Agent: curl/8"

Expected output: The system learns instead of guessing.

Troubleshooting

Problem

Real users hit challenges

Solution

Prefer invisible challenges and raise thresholds; measure false-positive rate before tightening.

Problem

Attackers solve challenges

Solution

Escalate to rate limiting and account-level controls; challenges alone are not a defense-in-depth substitute.

Limitations

  • Challenges add latency and complexity and are not a complete defense against determined automation.
  • Thresholds tuned too aggressively harm legitimate users more than the attackers, who can rotate.

Context

Add a graduated response to abusive traffic that separates bots from legitimate users. A hard IP block stops an attack but also blocks shared NAT users, so the fix breaks real customers while bots rotate addresses.

Steps

  1. Score requests by signals such as rate, user agent, and behavior. Expected: Suspicious traffic is identified before blocking.
  2. For medium scores, serve a challenge that real users pass transparently. Expected: Legitimate users are not blocked outright.
  3. For high scores, require authentication or temporarily throttle the identity. Expected: Abuse is slowed without a blanket block.
  4. Log and review challenges so thresholds can be tuned from data. Expected: The system learns instead of guessing.
const score = await scoreRequest(req);
if (score > HARD) return requireAuth(res);
if (score > SOFT) return issueChallenge(res);
return next();

Verify

  • Suspicious traffic is identified before blocking.
  • Legitimate users are not blocked outright.
  • Abuse is slowed without a blanket block.
  • The system learns instead of guessing.

Limits

  • Challenges add latency and complexity and are not a complete defense against determined automation.
  • Thresholds tuned too aggressively harm legitimate users more than the attackers, who can rotate.