mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 16:00:25 +08:00 
			
		
		
		
	WAF参数中增加“请求来源”
This commit is contained in:
		@@ -23,5 +23,5 @@ func (this *RequestRefererCheckpoint) ResponseValue(req requests.Request, resp *
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *RequestRefererCheckpoint) CacheLife() utils.CacheLife {
 | 
			
		||||
	return utils.CacheShortLife
 | 
			
		||||
	return utils.CacheMiddleLife
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								internal/waf/checkpoints/request_referer_origin.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								internal/waf/checkpoints/request_referer_origin.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
package checkpoints
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeNode/internal/waf/requests"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeNode/internal/waf/utils"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type RequestRefererOriginCheckpoint struct {
 | 
			
		||||
	Checkpoint
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *RequestRefererOriginCheckpoint) RequestValue(req requests.Request, param string, options maps.Map, ruleId int64) (value any, hasRequestBody bool, sysErr error, userErr error) {
 | 
			
		||||
	var s []string
 | 
			
		||||
 | 
			
		||||
	var referer = req.WAFRaw().Referer()
 | 
			
		||||
	if len(referer) > 0 {
 | 
			
		||||
		s = append(s, referer)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var origin = req.WAFRaw().Header.Get("Origin")
 | 
			
		||||
	if len(origin) > 0 {
 | 
			
		||||
		s = append(s, origin)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(s) > 0 {
 | 
			
		||||
		value = s
 | 
			
		||||
	} else {
 | 
			
		||||
		value = ""
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *RequestRefererOriginCheckpoint) ResponseValue(req requests.Request, resp *requests.Response, param string, options maps.Map, ruleId int64) (value any, hasRequestBody bool, sysErr error, userErr error) {
 | 
			
		||||
	if this.IsRequest() {
 | 
			
		||||
		return this.RequestValue(req, param, options, ruleId)
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *RequestRefererOriginCheckpoint) CacheLife() utils.CacheLife {
 | 
			
		||||
	return utils.CacheMiddleLife
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										38
									
								
								internal/waf/checkpoints/request_referer_origin_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								internal/waf/checkpoints/request_referer_origin_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
package checkpoints_test
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeNode/internal/waf/checkpoints"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeNode/internal/waf/requests"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"testing"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestRequestRefererOriginCheckpoint_RequestValue(t *testing.T) {
 | 
			
		||||
	rawReq, err := http.NewRequest(http.MethodGet, "https://example.com", nil)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	var req = requests.NewTestRequest(rawReq)
 | 
			
		||||
 | 
			
		||||
	var checkpoint = &checkpoints.RequestRefererOriginCheckpoint{}
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		t.Log(checkpoint.RequestValue(req, "", nil, 0))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		rawReq.Header.Set("Referer", "https://example.com/hello.yaml")
 | 
			
		||||
		t.Log(checkpoint.RequestValue(req, "", nil, 0))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		rawReq.Header.Set("Origin", "https://example.com/world.yaml")
 | 
			
		||||
		t.Log(checkpoint.RequestValue(req, "", nil, 0))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		rawReq.Header.Del("Referer")
 | 
			
		||||
		rawReq.Header.Set("Origin", "https://example.com/world.yaml")
 | 
			
		||||
		t.Log(checkpoint.RequestValue(req, "", nil, 0))
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -163,7 +163,15 @@ var AllCheckpoints = []*CheckpointDefinition{
 | 
			
		||||
		Priority:    100,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		Name:        "请求来源URL",
 | 
			
		||||
		Name:        "请求来源",
 | 
			
		||||
		Prefix:      "refererOrigin",
 | 
			
		||||
		Description: "请求报头中的Referer或Origin值",
 | 
			
		||||
		HasParams:   false,
 | 
			
		||||
		Instance:    new(RequestRefererOriginCheckpoint),
 | 
			
		||||
		Priority:    100,
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		Name:        "请求来源Referer",
 | 
			
		||||
		Prefix:      "referer",
 | 
			
		||||
		Description: "请求Header中的Referer值",
 | 
			
		||||
		HasParams:   false,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user