mirror of
https://github.com/Awuqing/BackupX.git
synced 2026-09-05 07:26:43 +08:00
feat(cluster): support restricted-network agent connectivity
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
stdhttp "net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func TestForwardedHeadersMiddlewareRejectsUntrustedHeaders(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
engine := gin.New()
|
||||
engine.Use(ForwardedHeadersMiddleware([]string{"127.0.0.1", "10.0.0.0/8"}))
|
||||
engine.GET("/master-url", func(c *gin.Context) {
|
||||
c.String(stdhttp.StatusOK, resolveMasterURL(c, ""))
|
||||
})
|
||||
|
||||
request := httptest.NewRequest(stdhttp.MethodGet, "http://master.example.com/master-url", nil)
|
||||
request.RemoteAddr = "203.0.113.10:54321"
|
||||
request.Header.Set("X-Forwarded-Host", "attacker.example.com")
|
||||
request.Header.Set("X-Forwarded-Proto", "https")
|
||||
recorder := httptest.NewRecorder()
|
||||
engine.ServeHTTP(recorder, request)
|
||||
|
||||
if recorder.Body.String() != "http://master.example.com" {
|
||||
t.Fatalf("untrusted forwarding headers changed URL: %q", recorder.Body.String())
|
||||
}
|
||||
}
|
||||
|
||||
func TestForwardedHeadersMiddlewareAcceptsTrustedProxy(t *testing.T) {
|
||||
gin.SetMode(gin.TestMode)
|
||||
engine := gin.New()
|
||||
engine.Use(ForwardedHeadersMiddleware([]string{"10.0.0.0/8"}))
|
||||
engine.GET("/master-url", func(c *gin.Context) {
|
||||
c.String(stdhttp.StatusOK, resolveMasterURL(c, ""))
|
||||
})
|
||||
|
||||
request := httptest.NewRequest(stdhttp.MethodGet, "http://backupx:8340/master-url", nil)
|
||||
request.RemoteAddr = "10.10.0.5:43210"
|
||||
request.Header.Set("X-Forwarded-Host", "backup.example.com")
|
||||
request.Header.Set("X-Forwarded-Proto", "https")
|
||||
recorder := httptest.NewRecorder()
|
||||
engine.ServeHTTP(recorder, request)
|
||||
|
||||
if recorder.Body.String() != "https://backup.example.com" {
|
||||
t.Fatalf("trusted forwarding headers were ignored: %q", recorder.Body.String())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user