Fix rate limit derriere Cloudflare + CORS sur POST demo

This commit is contained in:
2026-04-24 08:55:40 +02:00
parent f95d69c915
commit 2764228abf

View File

@@ -56,11 +56,18 @@ func (rl *rateLimiter) cleanupLoop() {
}
}
// clientIP extrait l'IP reelle en prenant la derniere entree de X-Forwarded-For.
// Justification : Traefik APPEND l'IP du peer au header existant, donc la
// derniere valeur est celle que Traefik a observe directement (le vrai client).
// Prendre la premiere serait une faille : un attaquant peut preremplir le header.
// clientIP extrait l'IP reelle du visiteur en tenant compte du setup reverse-proxy.
// Ordre de priorite :
// 1. CF-Connecting-IP : defini par Cloudflare sur la base de SA propre vue du
// peer TCP, non-forgeable par le client, ecrase toute valeur entrante.
// 2. X-Forwarded-For, derniere entree : quand seul Traefik est en front (pas
// de Cloudflare), Traefik append l'IP qu'il observe. Prendre la premiere
// serait une faille (header forgeable).
// 3. RemoteAddr : fallback si aucun header de proxy n'est present.
func clientIP(r *http.Request) string {
if cfIP := r.Header.Get("CF-Connecting-IP"); cfIP != "" {
return strings.TrimSpace(cfIP)
}
if xff := r.Header.Get("X-Forwarded-For"); xff != "" {
parts := strings.Split(xff, ",")
return strings.TrimSpace(parts[len(parts)-1])