fix(api): retrait du rate-limit applicatif sur /api/maxspeed (seule la limite anti-DoS nginx 30 r/s s'applique), suppression du champ 'dir' (chemin FS interne) dans les métadonnées, doc §4 mise à jour
This commit is contained in:
parent
4279eb0f6d
commit
25fa3e5cf0
3 changed files with 10 additions and 15 deletions
|
|
@ -48,7 +48,6 @@ export function meta() {
|
||||||
stepM: 40.0,
|
stepM: 40.0,
|
||||||
points,
|
points,
|
||||||
files,
|
files,
|
||||||
dir: GRID_DIR,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -143,17 +143,18 @@ Format d'erreur :
|
||||||
|
|
||||||
# 4. Rate limiting
|
# 4. Rate limiting
|
||||||
|
|
||||||
Chaque IP a un **quota global** sur le site : **200 requêtes / 10 s**. Une fois le
|
L'API n'a **aucun rate-limit applicatif propre**. Seule s'applique la limite
|
||||||
quota dépassé, l'API retourne `429` avec un en-tête `Retry-After` (secondes).
|
**anti-DoS du reverse-proxy nginx**, commune à tout le site : **30 requêtes / s
|
||||||
|
par IP** (avec un burst de 300). Au-delà, la requête reçoit un `429`.
|
||||||
|
|
||||||
```
|
```
|
||||||
HTTP/1.1 429 Too Many Requests
|
HTTP/1.1 429 Too Many Requests
|
||||||
Retry-After: 3
|
Retry-After: 1
|
||||||
```
|
```
|
||||||
|
|
||||||
Ces limites protègent le service public contre les abus et les DoS (surcouche au
|
C'est uniquement une protection contre les abus et les DoS, pas une restriction
|
||||||
reverse-proxy qui absorbe les attaques). Pour un usage intensif légitime (batch sur
|
d'usage : pour un batch lourd et légitime (interroger tout le continent), écris-nous
|
||||||
tout le continent), contacte-nous — on pourra te fournir un accès dédié.
|
— on pourra te fournir un accès dédié.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1338,17 +1338,12 @@ server = serve({
|
||||||
const ip = clientIp(req)
|
const ip = clientIp(req)
|
||||||
if (isHoneypotBanned(ip)) return errorPage(403, req)
|
if (isHoneypotBanned(ip)) return errorPage(403, req)
|
||||||
|
|
||||||
// API publique maxspeed (indépendante de ZMap). OPTIONS CORS autorisé,
|
// API publique maxspeed (indépendante de ZMap). OPTIONS CORS autorisé ;
|
||||||
// sinon on applique le même rate-limit global par IP que le reste.
|
// pas de rate-limit applicatif : seule la limite anti-DoS nginx
|
||||||
|
// (30 r/s par IP) s'applique sur l'API.
|
||||||
if (pathname.startsWith("/api/maxspeed")) {
|
if (pathname.startsWith("/api/maxspeed")) {
|
||||||
const msRes = await handleMaxspeedRoute(req, url)
|
const msRes = await handleMaxspeedRoute(req, url)
|
||||||
if (msRes) return msRes
|
if (msRes) return msRes
|
||||||
const retryAfterMs = allow(ip)
|
|
||||||
if (retryAfterMs > 0) {
|
|
||||||
const res = json({ ok: false, error: "trop de requêtes" }, 429)
|
|
||||||
res.headers.set("Retry-After", String(Math.ceil(retryAfterMs / 1000)))
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
return errorPage(404, req)
|
return errorPage(404, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue