Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7938023

Browse files
committed
refactor(trie): switched to an ext implementation
1 parentc905277 commit7938023

File tree

5 files changed

+50
-20
lines changed

5 files changed

+50
-20
lines changed

‎common_test.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@ package caddywaf
33
const (
44
geoIPdata="GeoLite2-Country.mmdb"
55
googleUSIP="74.125.131.105"
6+
localIP="127.0.0.1"
67
torListURL="https://cdn.nws.neurodyne.pro/nws-cdn-ut8hw561/waf/torbulkexitlist"// custom TOR list URL for testing
78
)

‎handler_test.go‎

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ func TestBlockedRequestPhase1_DNSBlacklist(t *testing.T) {
3636

3737
// Simulate a request to a blacklisted domain
3838
req:=httptest.NewRequest("GET","http://malicious.domain",nil)
39+
req.RemoteAddr=localIP
3940
w:=httptest.NewRecorder()
4041
state:=&WAFState{}
4142

@@ -97,7 +98,7 @@ func TestBlockedRequestPhase1_IPBlocking(t *testing.T) {
9798
assert.NoError(t,err)
9899

99100
ipBlackList:=trie.NewTrie()
100-
ipBlackList.Insert(netip.MustParsePrefix("127.0.0.1"),nil)
101+
ipBlackList.Insert(netip.MustParsePrefix("127.0.0.1/24"),nil)
101102

102103
middleware:=&Middleware{
103104
logger:logger,
@@ -111,7 +112,7 @@ func TestBlockedRequestPhase1_IPBlocking(t *testing.T) {
111112
}
112113

113114
req:=httptest.NewRequest("GET","http://example.com",nil)
114-
req.RemoteAddr="127.0.0.1"
115+
req.RemoteAddr=localIP
115116
w:=httptest.NewRecorder()
116117
state:=&WAFState{}
117118

@@ -208,6 +209,7 @@ func TestBlockedRequestPhase1_HeaderRegex(t *testing.T) {
208209
}
209210

210211
req:=httptest.NewRequest("GET","http://example.com",nil)
212+
req.RemoteAddr=localIP
211213
req.Header.Set("X-Custom-Header","this-is-a-bad-header")// Simulate a request with bad header
212214

213215
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
@@ -260,6 +262,7 @@ func TestBlockedRequestPhase1_HeaderRegex_SpecificValue(t *testing.T) {
260262
}
261263

262264
req:=httptest.NewRequest("GET","http://example.com",nil)
265+
req.RemoteAddr=localIP
263266
req.Header.Set("X-Specific-Header","specific-value")// Simulate a request with the specific header
264267

265268
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
@@ -312,6 +315,7 @@ func TestBlockedRequestPhase1_HeaderRegex_CommaSeparatedTargets(t *testing.T) {
312315
}
313316

314317
req:=httptest.NewRequest("GET","http://example.com",nil)
318+
req.RemoteAddr=localIP
315319
req.Header.Set("X-Custom-Header1","good-value")
316320
req.Header.Set("X-Custom-Header2","bad-value")// Simulate a request with bad value in one of the headers
317321

@@ -365,6 +369,7 @@ func TestBlockedRequestPhase1_CombinedConditions(t *testing.T) {
365369
}
366370

367371
req:=httptest.NewRequest("GET","http://bad-host.com",nil)
372+
req.RemoteAddr=localIP
368373
req.Header.Set("User-Agent","good-user")
369374

370375
// Create a context and add logID to it
@@ -417,6 +422,7 @@ func TestBlockedRequestPhase1_NoMatch(t *testing.T) {
417422
}
418423

419424
req:=httptest.NewRequest("GET","http://example.com",nil)
425+
req.RemoteAddr=localIP
420426
req.Header.Set("User-Agent","good-user")
421427

422428
// Create a context and add logID to it
@@ -469,6 +475,7 @@ func TestBlockedRequestPhase1_HeaderRegex_EmptyHeader(t *testing.T) {
469475
}
470476

471477
req:=httptest.NewRequest("GET","http://example.com",nil)
478+
req.RemoteAddr=localIP
472479

473480
// Create a context and add logID to it
474481
ctx:=context.Background()
@@ -519,6 +526,7 @@ func TestBlockedRequestPhase1_HeaderRegex_MissingHeader(t *testing.T) {
519526
}
520527

521528
req:=httptest.NewRequest("GET","http://example.com",nil)// Header not set
529+
req.RemoteAddr=localIP
522530

523531
// Create a context and add logID to it
524532
ctx:=context.Background()
@@ -571,6 +579,7 @@ func TestBlockedRequestPhase1_HeaderRegex_ComplexPattern(t *testing.T) {
571579
}
572580

573581
req:=httptest.NewRequest("GET","http://example.com",nil)
582+
req.RemoteAddr=localIP
574583
req.Header.Set("X-Email-Header","test@example.com")// Simulate a request with a valid email
575584

576585
// Create a context and add logID to it
@@ -623,6 +632,7 @@ func TestBlockedRequestPhase1_MultiTargetMatch(t *testing.T) {
623632
}
624633

625634
req:=httptest.NewRequest("GET","http://example.com",nil)
635+
req.RemoteAddr=localIP
626636
req.Header.Set("X-Custom-Header","good-header")
627637
req.Header.Set("User-Agent","bad-user-agent")
628638

@@ -675,6 +685,7 @@ func TestBlockedRequestPhase1_MultiTargetNoMatch(t *testing.T) {
675685
}
676686

677687
req:=httptest.NewRequest("GET","http://example.com",nil)
688+
req.RemoteAddr=localIP
678689
req.Header.Set("X-Custom-Header","good-header")
679690
req.Header.Set("User-Agent","good-user-agent")
680691

@@ -728,6 +739,7 @@ func TestBlockedRequestPhase1_URLParameterRegex_NoMatch(t *testing.T) {
728739
}
729740

730741
req:=httptest.NewRequest("GET","http://example.com?param1=good-param-value¶m2=good-value",nil)
742+
req.RemoteAddr=localIP
731743

732744
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
733745
ctx:=context.Background()
@@ -787,6 +799,7 @@ func TestBlockedRequestPhase1_MultipleRules(t *testing.T) {
787799
}
788800

789801
req:=httptest.NewRequest("GET","http://bad-host.com",nil)
802+
req.RemoteAddr=localIP
790803
req.Header.Set("User-Agent","bad-user")// Simulate a request with a bad user agent
791804

792805
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
@@ -809,6 +822,7 @@ func TestBlockedRequestPhase1_MultipleRules(t *testing.T) {
809822
assert.Contains(t,w.Body.String(),"Blocked by Multiple Rules","Response body should contain 'Blocked by Multiple Rules'")
810823

811824
req2:=httptest.NewRequest("GET","http://good-host.com",nil)
825+
req2.RemoteAddr=localIP
812826
req2.Header.Set("User-Agent","bad-user")// Simulate a request with a bad user agent
813827

814828
// Create a context and add logID to it - FIX: ADD CONTEXT HERE for req2 as well!
@@ -867,6 +881,7 @@ func TestBlockedRequestPhase2_BodyRegex(t *testing.T) {
867881
returnb
868882
}(),// Simulate a request with bad body
869883
)
884+
req.RemoteAddr=localIP
870885
req.Header.Set("Content-Type","text/plain")
871886

872887
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
@@ -925,6 +940,7 @@ func TestBlockedRequestPhase2_BodyRegex_JSON(t *testing.T) {
925940
returnb
926941
}(),// Simulate a request with JSON body
927942
)
943+
req.RemoteAddr=localIP
928944
req.Header.Set("Content-Type","application/json")
929945

930946
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
@@ -979,6 +995,7 @@ func TestBlockedRequestPhase2_BodyRegex_FormURLEncoded(t *testing.T) {
979995
req:=httptest.NewRequest("POST","http://example.com",
980996
strings.NewReader("param1=value1&secret=badvalue¶m2=value2"),
981997
)
998+
req.RemoteAddr=localIP
982999
req.Header.Set("Content-Type","application/x-www-form-urlencoded")
9831000

9841001
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
@@ -1037,6 +1054,7 @@ func TestBlockedRequestPhase2_BodyRegex_SpecificPattern(t *testing.T) {
10371054
returnb
10381055
}(),
10391056
)
1057+
req.RemoteAddr=localIP
10401058
req.Header.Set("Content-Type","text/plain")// Setting content type
10411059

10421060
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
@@ -1095,6 +1113,7 @@ func TestBlockedRequestPhase2_BodyRegex_NoMatch(t *testing.T) {
10951113
returnb
10961114
}(),
10971115
)
1116+
req.RemoteAddr=localIP
10981117
req.Header.Set("Content-Type","text/plain")
10991118

11001119
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
@@ -1162,6 +1181,7 @@ func TestBlockedRequestPhase2_BodyRegex_NoMatch_MultipartForm(t *testing.T) {
11621181
}
11631182

11641183
req:=httptest.NewRequest("POST","http://example.com",body)
1184+
req.RemoteAddr=localIP
11651185
req.Header.Set("Content-Type",writer.FormDataContentType())
11661186

11671187
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
@@ -1214,6 +1234,7 @@ func TestBlockedRequestPhase2_BodyRegex_NoBody(t *testing.T) {
12141234
}
12151235

12161236
req:=httptest.NewRequest("POST","http://example.com",nil)
1237+
req.RemoteAddr=localIP
12171238
w:=httptest.NewRecorder()
12181239
state:=&WAFState{}
12191240

@@ -1267,6 +1288,7 @@ func TestBlockedRequestPhase3_ResponseHeaderRegex_NoMatch(t *testing.T) {
12671288
}()
12681289

12691290
req:=httptest.NewRequest("GET","http://example.com",nil)
1291+
req.RemoteAddr=localIP
12701292
w:=httptest.NewRecorder()
12711293
state:=&WAFState{}
12721294

@@ -1321,6 +1343,7 @@ func TestBlockedRequestPhase4_ResponseBodyRegex_EmptyBody(t *testing.T) {
13211343
}()
13221344

13231345
req:=httptest.NewRequest("GET","http://example.com",nil)
1346+
req.RemoteAddr=localIP
13241347
w:=httptest.NewRecorder()
13251348
state:=&WAFState{}
13261349
err:=middleware.ServeHTTP(w,req,mockHandler)
@@ -1376,6 +1399,7 @@ func TestBlockedRequestPhase4_ResponseBodyRegex_NoBody(t *testing.T) {
13761399
}()
13771400

13781401
req:=httptest.NewRequest("GET","http://example.com",nil)
1402+
req.RemoteAddr=localIP
13791403
w:=httptest.NewRecorder()
13801404
state:=&WAFState{}
13811405
err:=middleware.ServeHTTP(w,req,mockHandler)
@@ -1429,6 +1453,7 @@ func TestBlockedRequestPhase3_ResponseHeaderRegex_NoSetCookie(t *testing.T) {
14291453
}()
14301454

14311455
req:=httptest.NewRequest("GET","http://example.com",nil)
1456+
req.RemoteAddr=localIP
14321457
w:=httptest.NewRecorder()
14331458
state:=&WAFState{}
14341459
err:=middleware.ServeHTTP(w,req,mockHandler)
@@ -1477,6 +1502,7 @@ func TestBlockedRequestPhase1_HeaderRegex_CaseInsensitive(t *testing.T) {
14771502
}
14781503

14791504
req:=httptest.NewRequest("GET","http://example.com",nil)
1505+
req.RemoteAddr=localIP
14801506
req.Header.Set("X-Custom-Header","bAd-VaLuE")// Test with mixed-case header value
14811507

14821508
// Create a context and add logID to it - FIX: ADD CONTEXT HERE
@@ -1529,6 +1555,7 @@ func TestBlockedRequestPhase1_HeaderRegex_MultipleMatchingHeaders(t *testing.T)
15291555
}
15301556

15311557
req:=httptest.NewRequest("GET","http://example.com",nil)
1558+
req.RemoteAddr=localIP
15321559
req.Header.Set("X-Custom-Header1","bad-value")
15331560
req.Header.Set("X-Custom-Header2","bad-value")// Both headers have a "bad" value
15341561

@@ -1552,6 +1579,7 @@ func TestBlockedRequestPhase1_HeaderRegex_MultipleMatchingHeaders(t *testing.T)
15521579
assert.Contains(t,w.Body.String(),"Blocked by Multiple Matching Headers Regex","Response body should contain 'Blocked by Multiple Matching Headers Regex'")
15531580

15541581
req2:=httptest.NewRequest("GET","http://example.com",nil)
1582+
req2.RemoteAddr=localIP
15551583
req2.Header.Set("X-Custom-Header1","good-value")
15561584
req2.Header.Set("X-Custom-Header2","bad-value")// One header has a "bad" value
15571585

@@ -1575,6 +1603,7 @@ func TestBlockedRequestPhase1_HeaderRegex_MultipleMatchingHeaders(t *testing.T)
15751603
assert.Contains(t,w2.Body.String(),"Blocked by Multiple Matching Headers Regex","Response body should contain 'Blocked by Multiple Matching Headers Regex'")
15761604

15771605
req3:=httptest.NewRequest("GET","http://example.com",nil)
1606+
req3.RemoteAddr=localIP
15781607
req3.Header.Set("X-Custom-Header1","good-value")
15791608
req3.Header.Set("X-Custom-Header2","good-value")// None headers have a "bad" value
15801609

@@ -1634,7 +1663,7 @@ func TestBlockedRequestPhase1_RateLimiting_MultiplePaths(t *testing.T) {
16341663

16351664
// Test path 1
16361665
req1:=httptest.NewRequest("GET","/api/v1/users",nil)
1637-
req1.RemoteAddr="192.168.1.1:12345"
1666+
req1.RemoteAddr=localIP
16381667
w1:=httptest.NewRecorder()
16391668
state1:=&WAFState{}
16401669

@@ -1643,7 +1672,7 @@ func TestBlockedRequestPhase1_RateLimiting_MultiplePaths(t *testing.T) {
16431672
assert.Equal(t,http.StatusOK,w1.Code,"Expected status code 200")
16441673

16451674
req2:=httptest.NewRequest("GET","/api/v1/users",nil)
1646-
req2.RemoteAddr="192.168.1.1:12345"
1675+
req2.RemoteAddr=localIP
16471676
w2:=httptest.NewRecorder()
16481677
state2:=&WAFState{}
16491678
middleware.handlePhase(w2,req2,1,state2)
@@ -1652,23 +1681,23 @@ func TestBlockedRequestPhase1_RateLimiting_MultiplePaths(t *testing.T) {
16521681

16531682
// Test path 2
16541683
req3:=httptest.NewRequest("GET","/admin/dashboard",nil)
1655-
req3.RemoteAddr="192.168.1.1:12345"
1684+
req3.RemoteAddr=localIP
16561685
w3:=httptest.NewRecorder()
16571686
state3:=&WAFState{}
16581687
middleware.handlePhase(w3,req3,1,state3)
16591688
assert.False(t,state3.Blocked,"First request to /admin should be allowed")
16601689
assert.Equal(t,http.StatusOK,w3.Code,"Expected status code 200")
16611690

16621691
req4:=httptest.NewRequest("GET","/admin/dashboard",nil)
1663-
req4.RemoteAddr="192.168.1.1:12345"
1692+
req4.RemoteAddr=localIP
16641693
w4:=httptest.NewRecorder()
16651694
state4:=&WAFState{}
16661695
middleware.handlePhase(w4,req4,1,state4)
16671696
assert.True(t,state4.Blocked,"Second request to /admin should be rate-limited")
16681697
assert.Equal(t,http.StatusTooManyRequests,w4.Code,"Expected status code 429")
16691698

16701699
req5:=httptest.NewRequest("GET","/not-rate-limited",nil)
1671-
req5.RemoteAddr="192.168.1.1:12345"
1700+
req5.RemoteAddr=localIP
16721701
w5:=httptest.NewRecorder()
16731702
state5:=&WAFState{}
16741703
middleware.handlePhase(w5,req5,1,state5)
@@ -1704,7 +1733,7 @@ func TestBlockedRequestPhase1_RateLimiting_DifferentIPs(t *testing.T) {
17041733

17051734
// Test different IPs
17061735
req1:=httptest.NewRequest("GET","/api/users",nil)
1707-
req1.RemoteAddr="192.168.1.1:12345"
1736+
req1.RemoteAddr=localIP
17081737
w1:=httptest.NewRecorder()
17091738
state1:=&WAFState{}
17101739

@@ -1713,15 +1742,15 @@ func TestBlockedRequestPhase1_RateLimiting_DifferentIPs(t *testing.T) {
17131742
assert.Equal(t,http.StatusOK,w1.Code,"Expected status code 200")
17141743

17151744
req2:=httptest.NewRequest("GET","/api/users",nil)
1716-
req2.RemoteAddr="192.168.1.2:12345"
1745+
req2.RemoteAddr="192.168.1.2"
17171746
w2:=httptest.NewRecorder()
17181747
state2:=&WAFState{}
17191748
middleware.handlePhase(w2,req2,1,state2)
17201749
assert.False(t,state2.Blocked,"First request from 192.168.1.2 should be allowed")
17211750
assert.Equal(t,http.StatusOK,w2.Code,"Expected status code 200")
17221751

17231752
req3:=httptest.NewRequest("GET","/api/users",nil)
1724-
req3.RemoteAddr="192.168.1.1:12345"
1753+
req3.RemoteAddr=localIP
17251754
w3:=httptest.NewRecorder()
17261755
state3:=&WAFState{}
17271756
middleware.handlePhase(w3,req3,1,state3)
@@ -1757,15 +1786,15 @@ func TestBlockedRequestPhase1_RateLimiting_MatchAllPaths(t *testing.T) {
17571786

17581787
// Test with match all paths
17591788
req1:=httptest.NewRequest("GET","/api/users",nil)
1760-
req1.RemoteAddr="192.168.1.1:12345"
1789+
req1.RemoteAddr=localIP
17611790
w1:=httptest.NewRecorder()
17621791
state1:=&WAFState{}
17631792
middleware.handlePhase(w1,req1,1,state1)
17641793
assert.False(t,state1.Blocked,"First request to /api/users should be allowed")
17651794
assert.Equal(t,http.StatusOK,w1.Code,"Expected status code 200")
17661795

17671796
req2:=httptest.NewRequest("GET","/api/users",nil)
1768-
req2.RemoteAddr="192.168.1.1:12345"
1797+
req2.RemoteAddr=localIP
17691798
w2:=httptest.NewRecorder()
17701799
state2:=&WAFState{}
17711800

@@ -1774,7 +1803,7 @@ func TestBlockedRequestPhase1_RateLimiting_MatchAllPaths(t *testing.T) {
17741803
assert.Equal(t,http.StatusTooManyRequests,w2.Code,"Expected status code 429")
17751804

17761805
req3:=httptest.NewRequest("GET","/some-other-path",nil)
1777-
req3.RemoteAddr="192.168.1.1:12345"
1806+
req3.RemoteAddr=localIP
17781807
w3:=httptest.NewRecorder()
17791808
state3:=&WAFState{}
17801809
middleware.handlePhase(w3,req3,1,state3)

‎logging_test.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ func TestLogRequest(t *testing.T) {
2525

2626
// Create a test request
2727
req:=httptest.NewRequest("GET","/test?foo=bar",nil)
28-
req.RemoteAddr="192.168.1.1:12345"
28+
req.RemoteAddr=localIP
2929
req.Header.Set("User-Agent","test-agent")
3030

3131
// Log a test message

‎ratelimiter_test.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ func TestBlockedRequestPhase1_RateLimiting(t *testing.T) {
404404

405405
// Simulate two requests from the same IP
406406
req:=httptest.NewRequest("GET","http://example.com/api/test",nil)
407-
req.RemoteAddr="192.168.1.1:12345"
407+
req.RemoteAddr=localIP
408408
w1:=httptest.NewRecorder()
409409
w2:=httptest.NewRecorder()
410410
state1:=&WAFState{}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp