Referer logging Check
This commit is contained in:
+21
-10
@@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
@@ -25,23 +26,33 @@ func RefererCheck(allowedOrigins []string) func(http.Handler) http.Handler {
|
||||
return func(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
referer := r.Header.Get("Referer")
|
||||
origin := r.Header.Get("Origin")
|
||||
|
||||
// Block requests with no referer (this blocks direct browser requests)
|
||||
if referer == "" {
|
||||
http.Error(w, "Forbidden!", http.StatusForbidden)
|
||||
return
|
||||
}
|
||||
// Debug logging
|
||||
log.Printf("RefererCheck - Referer: '%s', Origin: '%s', AllowedOrigins: %+v", referer, origin, allowedOrigins)
|
||||
log.Printf("Request headers: %+v", r.Header)
|
||||
|
||||
// Check if referer matches allowed origins
|
||||
for _, origin := range allowedOrigins {
|
||||
if strings.HasPrefix(referer, origin) {
|
||||
// Check both Referer and Origin headers
|
||||
if referer != "" {
|
||||
for _, allowedOrigin := range allowedOrigins {
|
||||
if strings.HasPrefix(referer, strings.TrimSuffix(allowedOrigin, "/")) {
|
||||
next.ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Block if referer doesn't match any allowed origin
|
||||
http.Error(w, "Forbidden!", http.StatusForbidden)
|
||||
if origin != "" {
|
||||
for _, allowedOrigin := range allowedOrigins {
|
||||
if origin == strings.TrimSuffix(allowedOrigin, "/") {
|
||||
next.ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.Printf("RefererCheck - BLOCKED: No valid referer or origin found")
|
||||
http.Error(w, "Forbidden", http.StatusForbidden)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user