К основному содержанию
скилл CX Codex

rate-limiting-abuse-protection — скилл для Claude Code: защита API

Скилл добавляет в проект ограничение частоты запросов: политики на маршрут, лимиты по IP и пользователю, скользящее окно и понятные ответы об ошибке.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add patricio0312rev/skills --skill rate-limiting-abuse-protection -a claude-code
Открыть на GitHub

Что делает rate-limiting-abuse-protection

Скилл описывает, как закрыть API от перебора и флуда. Внутри — четыре стратегии: фиксированное окно, скользящее окно, token bucket и leaky bucket. Для каждой даны примеры на TypeScript: глобальный лимитер через express-rate-limit и отдельный, более строгий, для эндпоинтов входа.

Для распределённых приложений есть вариант на Redis через ioredis: ключ чистится по score, запрос добавляется, счётчик читается, ключу ставится TTL. Отдельные блоки — лимит по req.user.id и проверка репутации IP со списком заблокированных адресов и запросом к threat intelligence API. Ответы отдают заголовки X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset и Retry-After, а при превышении — 429 с временем повтора.

Учтите: вариант с Redis требует запущенного Redis и пакета ioredis, а проверка репутации IP опирается на внешний сервис, которого в примере нет — функцию checkThreatIntel придётся написать самому. Скилл советует ставить разные лимиты на разные эндпоинты, снижать их для дорогих операций и пропускать внутренние сервисы.

Какие задачи решает

  • ограничить частоту запросов к API по маршрутам
  • защитить форму входа от перебора паролей
  • считать лимит отдельно для каждого пользователя
  • отдавать клиенту заголовки с остатком квоты и временем сброса
  • вести лог нарушений и искать в нём всплески

Примеры запросов агенту

  • добавь rate limiting на /api/ с лимитом 100 запросов за 15 минут
  • сделай строгий лимит на /api/auth/login — 5 попыток, успешные входы не считать
  • перепиши лимитер на Redis со скользящим окном и лимитом по user id

Как установить rate-limiting-abuse-protection

1Через Skills CLI (Vercel)

npx skills add patricio0312rev/skills --skill rate-limiting-abuse-protection -a claude-code

2Вручную: положить файлы

~/.claude/skills/rate-limiting-abuse-protection/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/rate-limiting-abuse-protection/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о rate-limiting-abuse-protection

Как установить rate-limiting-abuse-protection в Claude?

Выполните npx skills add patricio0312rev/skills --skill rate-limiting-abuse-protection -a claude-code. Скилл окажется в ~/.claude/skills/rate-limiting-abuse-protection/SKILL.md.

Что делает этот скилл?

Он даёт агенту готовые схемы ограничения частоты запросов: политики на маршрут, лимиты по IP и пользователю, скользящее окно, заголовки лимитов и безопасные ответы 429.

Что нужно для варианта с Redis?

Запущенный Redis и пакет ioredis. Проверка репутации IP дополнительно требует внешнего threat intelligence API — в примере вызывается функция checkThreatIntel, её нужно реализовать.

Исходный текст

SKILL.md · MIT
---
name: rate-limiting-abuse-protection
description: Implements rate limiting and abuse prevention with per-route policies, IP/user-based limits, sliding windows, safe error responses, and observability. Use when adding "rate limiting", "API protection", "abuse prevention", or "DDoS protection".
---

# Rate Limiting & Abuse Protection

Protect APIs from abuse with intelligent rate limiting.

## Rate Limit Strategies

**Fixed Window**: 100 requests per hour
**Sliding Window**: More accurate, prevents bursts
**Token Bucket**: Allow bursts up to limit
**Leaky Bucket**: Smooth request rate

## Implementation (Express)

```typescript
import rateLimit from "express-rate-limit";

// Global rate limit
const globalLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 100, // 100 requests per window
  message: "Too many requests, please try again later",
  standardHeaders: true, // Return rate limit info in headers
  legacyHeaders: false,
});

// Stricter limit for auth endpoints
const authLimiter = rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 5, // Only 5 attempts
  skipSuccessfulRequests: true, // Don't count successful logins
});

app.use("/api/", globalLimiter);
app.use("/api/auth/login", authLimiter);
```

## Redis-based Rate Limiting

```typescript
import Redis from "ioredis";

const redis = new Redis();

export const checkRateLimit = async (
  key: string,
  max: number,
  window: number
): Promise<{ allowed: boolean; remaining: number }> => {
  const now = Date.now();
  const windowStart = now - window;

  await redis
    .multi()
    .zremrangebyscore(key, 0, windowStart)
    .zadd(key, now, `${now}`)
    .zcard(key)
    .expire(key, Math.ceil(window / 1000))
    .exec();

  const count = await redis.zcard(key);

  return {
    allowed: count <= max,
    remaining: Math.max(0, max - count),
  };
};
```

## Per-User Rate Limiting

```typescript
export const userRateLimit = (max: number, window: number) => {
  return async (req, res, next) => {
    if (!req.user) return next();

    const key = `rate_limit:user:${req.user.id}`;
    const result = await checkRateLimit(key, max, window);

    res.setHeader("X-RateLimit-Limit", max);
    res.setHeader("X-RateLimit-Remaining", result.remaining);

    if (!result.allowed) {
      return res.status(429).json({
        error: "Rate limit exceeded",
        retryAfter: window / 1000,
      });
    }

    next();
  };
};
```

## IP-based Protection

```typescript
// Block suspicious IPs
const ipBlocklist = new Set<string>();

export const checkIPReputation = async (ip: string): Promise<boolean> => {
  if (ipBlocklist.has(ip)) return false;

  // Check against threat intelligence API
  const reputation = await checkThreatIntel(ip);
  if (reputation.isMalicious) {
    ipBlocklist.add(ip);
    return false;
  }

  return true;
};
```

## Response Headers

```
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1640000000
Retry-After: 3600
```

## Best Practices

- Different limits for different endpoints
- Lower limits for expensive operations
- Skip rate limit for internal services
- Return helpful error messages
- Log rate limit violations
- Monitor for abuse patterns
- Allowlist trusted IPs

## Output Checklist

- [ ] Rate limiter middleware
- [ ] Per-route policies
- [ ] User-based limiting
- [ ] IP-based limiting
- [ ] Rate limit headers
- [ ] Safe error responses
- [ ] Observability/logging
- [ ] Bypass for internal services

© patricio0312rev · MIT · patricio0312rev/skills

Похожие скиллы

Всё по теме «Безопасность» →
rate-limiting-implementation aj-geddes Скилл помогает агенту добавить в сервис ограничение частоты запросов, квоты и backpressure. Пригодится, когда API открыт наружу или нагрузка растёт. CX Codex +1 502установок api-rate-limiting secondsky Скилл помогает добавить ограничение частоты запросов к API: алгоритмы token bucket, sliding window и вариант на Redis. Пригодится, когда открываешь публичный API или делишь доступ по тарифам. CX Codex +1 491установок setup-rate-limiting davila7 Слэш-команда разбирает проект и собирает систему ограничения запросов к API: алгоритмы, квоты по пользователям, хранение счётчиков. 247установок implementing-api-rate-limiting-and-throttling mahipal Скилл внедряет алгоритмы sliding window и token bucket через Redis, защищая эндпоинты API от перебора паролей и исчерпания ресурсов. CX Codex +1 348установок api-gateway-backend-security-and-rate-limiting официальный google Настраивает аутентификацию клиентов и доступ API Gateway к бэкендам, а также квоты по проектам. Пригодится для защиты Cloud Run и разбора ошибок квот. CX Codex 360установок marketplace-rate-limiting vtex Учит агента обрабатывать 429 от VTEX API: экспоненциальный backoff с джиттером, чтение заголовков лимитов, circuit breaker и очередь запросов. CX Codex +1 1 000установок

Из того же набора26

mermaid-diagram-generator Скилл рисует диаграммы Mermaid прямо в markdown: блок-схемы, sequence, ERD, состояния и классы. Пригодится, когда нужно показать поток запроса или схему базы в документации. CX Codex +1 331установок visual-regression-tester Скилл настраивает визуальное регрессионное тестирование: снимает скриншоты, сравнивает их с базовыми и ловит случайные изменения интерфейса. CX Codex +1 330установок form-wizard-builder Скилл собирает многошаговые формы: схемы валидации, шаги, общее состояние, индикатор прогресса и шаг проверки перед отправкой. CX Codex +1 328установок skill-creator Скилл, который пишет новые скиллы по конвенциям репозитория: структура, frontmatter, воркфлоу и примеры кода. CX Codex +1 321установок cost-latency-optimizer Скилл разбирает, куда уходят деньги и время в LLM-приложении, и предлагает кеш, выбор модели, батчинг и сжатие промптов. CX Codex +1 322установок load-test-builder Собирает нагрузочные и стресс-тесты на k6, Artillery или autocannon и помогает встроить их в CI как проверку производительности. CX Codex +1 316установок openapi-generator Собирает спецификацию OpenAPI 3.0/3.1 из маршрутов Express, Next.js, Fastify, Hono или NestJS — со схемами, примерами и описаниями. CX Codex +1 306установок api-test-suite-generator Скилл сканирует определения маршрутов и генерирует тесты API на Jest, Vitest или Supertest. Пригодится, когда эндпоинты уже есть, а тестов к ним нет. CX Codex +1 303установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой