Skip to content

Commit 324bb39

Browse files
committed
fix(*) compatible with nginx-1.23.0
1 parent 107cca9 commit 324bb39

File tree

3 files changed

+90
-8
lines changed

3 files changed

+90
-8
lines changed

src/ngx_http_waf_module_captcha.c

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -436,14 +436,24 @@ static ngx_int_t _verify_cookies(ngx_http_request_t* r) {
436436
ngx_memzero(under_attack_client, sizeof(_info_t));
437437
ngx_memzero(under_attack_expect, sizeof(_info_t));
438438

439+
#if (nginx_version >= 1023000)
440+
if (r->headers_in.cookie != NULL) {
441+
ngx_table_elt_t* cookies = r->headers_in.cookie;
442+
#else
439443
if (r->headers_in.cookies.nelts > 0) {
444+
ngx_array_t* cookies = &(r->headers_in.cookies);
445+
#endif
440446
ngx_str_t key, value;
441447

442448
ngx_str_set(&key, "__waf_captcha_uid");
443449
ngx_str_null(&value);
444450
ngx_http_waf_dpf(r, "searching cookie %V", &key);
445451

446-
if (ngx_http_parse_multi_header_lines(&(r->headers_in.cookies), &key, &value) != NGX_DECLINED) {
452+
#if (nginx_version >= 1023000)
453+
if (ngx_http_parse_multi_header_lines(r, cookies, &key, &value) != NULL) {
454+
#else
455+
if (ngx_http_parse_multi_header_lines(cookies, &key, &value) != NGX_DECLINED) {
456+
#endif
447457
ngx_http_waf_dpf(r, "found cookie %V", &value);
448458
ngx_memcpy(under_attack_client->uid, value.data, value.len);
449459

@@ -455,7 +465,11 @@ static ngx_int_t _verify_cookies(ngx_http_request_t* r) {
455465
ngx_str_null(&value);
456466
ngx_http_waf_dpf(r, "searching cookie %V", &key);
457467

458-
if (ngx_http_parse_multi_header_lines(&(r->headers_in.cookies), &key, &value) != NGX_DECLINED) {
468+
#if (nginx_version >= 1023000)
469+
if (ngx_http_parse_multi_header_lines(r, cookies, &key, &value) != NULL) {
470+
#else
471+
if (ngx_http_parse_multi_header_lines(cookies, &key, &value) != NGX_DECLINED) {
472+
#endif
459473
ngx_http_waf_dpf(r, "found cookie %V", &value);
460474
ngx_memcpy(under_attack_client->hmac, value.data, value.len);
461475

@@ -467,7 +481,11 @@ static ngx_int_t _verify_cookies(ngx_http_request_t* r) {
467481
ngx_str_null(&value);
468482
ngx_http_waf_dpf(r, "searching cookie %V", &key);
469483

470-
if (ngx_http_parse_multi_header_lines(&(r->headers_in.cookies), &key, &value) != NGX_DECLINED) {
484+
#if (nginx_version >= 1023000)
485+
if (ngx_http_parse_multi_header_lines(r, cookies, &key, &value) != NULL) {
486+
#else
487+
if (ngx_http_parse_multi_header_lines(cookies, &key, &value) != NGX_DECLINED) {
488+
#endif
471489
ngx_http_waf_dpf(r, "found cookie %V", &value);
472490
ngx_memcpy(under_attack_client->time, value.data, value.len);
473491

src/ngx_http_waf_module_check.c

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,11 +578,56 @@ ngx_int_t ngx_http_waf_handler_check_black_cookie(ngx_http_request_t* r) {
578578
return NGX_HTTP_WAF_NOT_MATCHED;
579579
}
580580

581+
#if (nginx_version >= 1023000)
582+
if (r->headers_in.cookie == NULL) {
583+
ngx_http_waf_dp(r, "empty cookies ... return");
584+
return NGX_HTTP_WAF_NOT_MATCHED;
585+
}
586+
587+
ngx_table_elt_t* p = r->headers_in.cookie;
588+
589+
for (p = r->headers_in.cookie; p != NULL; p = p->next) {
590+
size_t len = p->key.len + p->value.len + 1;
591+
u_char* buf = ngx_pcalloc(r->pool, sizeof(u_char) * (len + 1));
592+
593+
size_t offset = 0;
594+
ngx_memcpy(buf + offset, p->key.data, sizeof(u_char) * p->key.len);
595+
596+
offset += sizeof(u_char) * p->key.len;
597+
buf[offset] = '=';
598+
599+
++offset;
600+
ngx_memcpy(buf + offset, p->value.data, sizeof(u_char) * p->value.len);
601+
602+
ngx_str_t cookie;
603+
cookie.len = len;
604+
cookie.data = buf;
605+
606+
ngx_array_t* regex_array = loc_conf->black_cookie;
607+
lru_cache_t* cache = loc_conf->black_cookie_inspection_cache;
608+
ret_value = ngx_http_waf_regex_exec_arrray(r, &cookie, regex_array, (u_char*)"BLACK-COOKIE", cache);
609+
610+
if (ret_value == NGX_HTTP_WAF_MATCHED) {
611+
ngx_http_waf_dp(r, "matched");
612+
ctx->gernal_logged = 1;
613+
ctx->blocked = 1;
614+
ngx_http_waf_append_action_chain(r, action);
615+
616+
} else {
617+
ngx_http_waf_dp(r, "not matched");
618+
}
619+
620+
if (ctx->blocked) {
621+
ngx_http_waf_dp(r, "blocked ... break");
622+
break;
623+
}
624+
}
625+
#else
581626
if (r->headers_in.cookies.nelts == 0) {
582627
ngx_http_waf_dp(r, "empty cookies ... return");
583628
return NGX_HTTP_WAF_NOT_MATCHED;
584629
}
585-
630+
586631
ngx_table_elt_t** ppcookie = r->headers_in.cookies.elts;
587632
size_t i;
588633
for (i = 0; i < r->headers_in.cookies.nelts; i++, ppcookie++) {
@@ -609,6 +654,7 @@ ngx_int_t ngx_http_waf_handler_check_black_cookie(ngx_http_request_t* r) {
609654
break;
610655
}
611656
}
657+
#endif
612658

613659
ngx_http_waf_dp_func_end(r);
614660
return ret_value;

src/ngx_http_waf_module_under_attack.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,25 @@ ngx_int_t ngx_http_waf_handler_under_attack(ngx_http_request_t* r) {
3535
_info_t* under_attack_client = ngx_pcalloc(r->pool, sizeof(_info_t));
3636
_info_t* under_attack_expect = ngx_pcalloc(r->pool, sizeof(_info_t));
3737

38-
38+
#if (nginx_version >= 1023000)
39+
if (r->headers_in.cookie != NULL) {
40+
ngx_table_elt_t* cookies = r->headers_in.cookie;
41+
#else
3942
if (r->headers_in.cookies.nelts > 0) {
43+
ngx_array_t* cookies = &(r->headers_in.cookies);
44+
#endif
4045
ngx_str_t key, value;
4146

47+
4248
ngx_str_set(&key, "__waf_under_attack_time");
4349
ngx_str_null(&value);
4450
ngx_http_waf_dpf(r, "searching cookie %V", &key);
4551

46-
if (ngx_http_parse_multi_header_lines(&(r->headers_in.cookies), &key, &value) != NGX_DECLINED) {
52+
#if (nginx_version >= 1023000)
53+
if (ngx_http_parse_multi_header_lines(r, cookies, &key, &value) != NULL) {
54+
#else
55+
if (ngx_http_parse_multi_header_lines(cookies, &key, &value) != NGX_DECLINED) {
56+
#endif
4757
ngx_http_waf_dpf(r, "found cookie %V", &key);
4858
ngx_memcpy(under_attack_client->time, value.data, value.len);
4959

@@ -55,7 +65,11 @@ ngx_int_t ngx_http_waf_handler_under_attack(ngx_http_request_t* r) {
5565
ngx_str_null(&value);
5666
ngx_http_waf_dpf(r, "searching cookie %V", &key);
5767

58-
if (ngx_http_parse_multi_header_lines(&(r->headers_in.cookies), &key, &value) != NGX_DECLINED) {
68+
#if (nginx_version >= 1023000)
69+
if (ngx_http_parse_multi_header_lines(r, cookies, &key, &value) != NULL) {
70+
#else
71+
if (ngx_http_parse_multi_header_lines(cookies, &key, &value) != NGX_DECLINED) {
72+
#endif
5973
ngx_http_waf_dpf(r, "found cookie %V", &key);
6074
ngx_memcpy(under_attack_client->uid, value.data, value.len);
6175

@@ -67,7 +81,11 @@ ngx_int_t ngx_http_waf_handler_under_attack(ngx_http_request_t* r) {
6781
ngx_str_null(&value);
6882
ngx_http_waf_dpf(r, "searching cookie %V", &key);
6983

70-
if (ngx_http_parse_multi_header_lines(&(r->headers_in.cookies), &key, &value) != NGX_DECLINED) {
84+
#if (nginx_version >= 1023000)
85+
if (ngx_http_parse_multi_header_lines(r, cookies, &key, &value) != NULL) {
86+
#else
87+
if (ngx_http_parse_multi_header_lines(cookies, &key, &value) != NGX_DECLINED) {
88+
#endif
7189
ngx_http_waf_dpf(r, "found cookie %V", &key);
7290
ngx_memcpy(under_attack_client->hmac, value.data, value.len);
7391

0 commit comments

Comments
 (0)