package waf_test import ( "bytes" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/firewallconfigs" "github.com/TeaOSLab/EdgeNode/internal/waf" "github.com/TeaOSLab/EdgeNode/internal/waf/requests" "github.com/iwind/TeaGo/assert" "github.com/iwind/TeaGo/lists" "github.com/iwind/TeaGo/logs" "github.com/iwind/TeaGo/types" "math/rand" "mime/multipart" "net/http" "net/url" "strings" "testing" "time" ) const testUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_0_0) AppleWebKit/500.00 (KHTML, like Gecko) Chrome/100.0.0.0" func Test_Template(t *testing.T) { var a = assert.NewAssertion(t) wafInstance, err := waf.Template() if err != nil { t.Fatal(err) } testTemplate1001(a, t, wafInstance) testTemplate1002(a, t, wafInstance) testTemplate1003(a, t, wafInstance) testTemplate2001(a, t, wafInstance) testTemplate3001(a, t, wafInstance) testTemplate4001(a, t, wafInstance) testTemplate5001(a, t, wafInstance) testTemplate6001(a, t, wafInstance) testTemplate7001(a, t, wafInstance) testTemplate20001(a, t, wafInstance) } func Test_Template2(t *testing.T) { reader := bytes.NewReader([]byte(strings.Repeat("HELLO", 1024))) req, err := http.NewRequest(http.MethodPost, "https://example.com/index.php?id=123", reader) if err != nil { t.Fatal(err) } wafInstance, err := waf.Template() if err != nil { t.Fatal(err) } now := time.Now() goNext, _, _, set, err := wafInstance.MatchRequest(requests.NewTestRequest(req), nil, firewallconfigs.ServerCaptchaTypeNone) if err != nil { t.Fatal(err) } t.Log(time.Since(now).Seconds()*1000, "ms") if goNext { t.Log("ok") return } logs.PrintAsJSON(set, t) } func BenchmarkTemplate(b *testing.B) { wafInstance, err := waf.Template() if err != nil { b.Fatal(err) } b.ResetTimer() for i := 0; i < b.N; i++ { req, err := http.NewRequest(http.MethodGet, "https://example.com/index.php?id=123", nil) if err != nil { b.Fatal(err) } req.Header.Set("User-Agent", testUserAgent) _, _, _, _, _ = wafInstance.MatchRequest(requests.NewTestRequest(req), nil, firewallconfigs.ServerCaptchaTypeNone) } } func testTemplate1001(a *assert.Assertion, t *testing.T, template *waf.WAF) { req, err := http.NewRequest(http.MethodGet, "http://example.com/index.php?id=onmousedown%3D123", nil) if err != nil { t.Fatal(err) } req.Header.Set("User-Agent", testUserAgent) _, _, _, result, err := template.MatchRequest(requests.NewTestRequest(req), nil, firewallconfigs.ServerCaptchaTypeNone) if err != nil { t.Fatal(err) } a.IsNotNil(result) if result != nil { a.IsTrue(result.Code == "1001") } } func testTemplate1002(a *assert.Assertion, t *testing.T, template *waf.WAF) { req, err := http.NewRequest(http.MethodGet, "http://example.com/index.php?id=eval%28", nil) if err != nil { t.Fatal(err) } _, _, _, result, err := template.MatchRequest(requests.NewTestRequest(req), nil, firewallconfigs.ServerCaptchaTypeNone) if err != nil { t.Fatal(err) } a.IsNotNil(result) if result != nil { a.IsTrue(result.Code == "1002") } } func testTemplate1003(a *assert.Assertion, t *testing.T, template *waf.WAF) { req, err := http.NewRequest(http.MethodGet, "http://example.com/index.php?id=