Add GetRealIP function to improve IP retrieval in middleware; update BotBlockerMiddleware to use new function for logging blocked requests
Some checks failed
renovate / renovate (push) Failing after 21s
CI / build-frontend (push) Successful in 51s
CI / build-backend (push) Successful in 26s
OSV-Scanner Scheduled Scan / scan-scheduled (push) Successful in 9m39s

This commit is contained in:
2025-12-27 20:01:05 -06:00
parent 4e364bec74
commit 4ed6fcd752

View File

@@ -130,14 +130,34 @@ var ForbiddenPatterns = []string{
"etc/passwd", "cgi-bin",
}
func GetRealIP(r *http.Request) string {
ip, _, err := net.SplitHostPort(r.RemoteAddr)
if err != nil {
ip = r.RemoteAddr
}
if xff := r.Header.Get("X-Forwarded-For"); xff != "" {
if comma := strings.IndexByte(xff, ','); comma != -1 {
return strings.TrimSpace(xff[:comma])
}
return strings.TrimSpace(xff)
}
if xri := r.Header.Get("X-Real-IP"); xri != "" {
return strings.TrimSpace(xri)
}
return ip
}
func BotBlockerMiddleware(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
path := strings.ToLower(r.URL.Path)
query := strings.ToLower(r.URL.RawQuery)
for _, pattern := range ForbiddenPatterns {
if strings.Contains(path, pattern) || strings.Contains(query, pattern) {
log.Printf("Blocked suspicious request: %s from %s", r.URL.String(), r.RemoteAddr)
if strings.Contains(path, pattern) {
ip := GetRealIP(r)
log.Printf("Blocked suspicious request: %s from %s", r.URL.String(), ip)
http.Error(w, "Forbidden", http.StatusForbidden)
return
}
@@ -276,18 +296,7 @@ func AuthMiddleware(am *AuthManager, next http.HandlerFunc) http.HandlerFunc {
func LimitMiddleware(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ip, _, err := net.SplitHostPort(r.RemoteAddr)
if err != nil {
ip = r.RemoteAddr
}
if xff := r.Header.Get("X-Forwarded-For"); xff != "" {
if comma := strings.IndexByte(xff, ','); comma != -1 {
ip = xff[:comma]
} else {
ip = xff
}
}
ip := GetRealIP(r)
ua := r.Header.Get("User-Agent")
hash := sha256.New()