Fix rate limit derriere Cloudflare + CORS sur POST demo
This commit is contained in:
@@ -56,11 +56,18 @@ func (rl *rateLimiter) cleanupLoop() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// clientIP extrait l'IP reelle en prenant la derniere entree de X-Forwarded-For.
|
// clientIP extrait l'IP reelle du visiteur en tenant compte du setup reverse-proxy.
|
||||||
// Justification : Traefik APPEND l'IP du peer au header existant, donc la
|
// Ordre de priorite :
|
||||||
// derniere valeur est celle que Traefik a observe directement (le vrai client).
|
// 1. CF-Connecting-IP : defini par Cloudflare sur la base de SA propre vue du
|
||||||
// Prendre la premiere serait une faille : un attaquant peut preremplir le header.
|
// 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 {
|
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 != "" {
|
if xff := r.Header.Get("X-Forwarded-For"); xff != "" {
|
||||||
parts := strings.Split(xff, ",")
|
parts := strings.Split(xff, ",")
|
||||||
return strings.TrimSpace(parts[len(parts)-1])
|
return strings.TrimSpace(parts[len(parts)-1])
|
||||||
|
|||||||
Reference in New Issue
Block a user