Modsecurity blockiert meine legitime XHR-POST-Anfrage (403 verboten)

Modsecurity blockiert meine legitime XHR-POST-Anfrage (403 verboten)

Ich bin neu beim Thema Modsecurity, daher ist die Antwort vielleicht trivial, aber ...

Ich habe Modsecurity auf meinem neuen nginx/1.24.0-Server mit dem Standardsatz empfohlener Regeln eingerichtet: coreruleset-3.3.0 und seitdem wird meine POST XHR-Anfrage blockiert. Dies ist eine grundlegende Laravel/Livewire-Form.

Die von Modsecurity gesendeten und protokollierten Header sehen wie folgt aus:

POST /livewire/update HTTP/2.0
content-type: application/json
origin: https://example.com
referer: https://example.com/en
pragma: no-cache
accept-encoding: gzip, deflate, br
cookie: XSRF-TOKEN=eyJpdiI6IkJVTXpEK01rYTRYVFI1aGxjOE9T...
content-length: 540
accept-language: it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3
te: trailers
accept: */*
cache-control: no-cache
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0
sec-fetch-site: same-origin
sec-fetch-dest: empty
authorization: Basic Y2Z0cmFbjpjmdG9u
host: example.com
sec-fetch-mode: no-cors

und die Protokolle berichten:

  1. „Content-Length-HTTP-Header ist nicht numerisch“ – aber für mich sieht „540“ numerisch aus!
ModSecurity: Warning. Matched "Operator `Rx' with parameter `^\d+$' against variable `REQUEST_HEADERS:content-length' (Value: `540' ) 
[file "/etc/nginx/modsec/coreruleset-3.3.0/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] 
[line "127"] 
[id "920160"] 
[msg "Content-Length HTTP header is not numeric"] 
[data "540"] 
[severity "2"] 
  1. „Unzulässiger Content-Type-Header“ – wie kommt es, dass „application/json“ unzulässig ist?
ModSecurity: Warning. Matched "Operator `Rx' with parameter `^[\w/.+-]+(?... against variable `REQUEST_HEADERS:content-type' (Value: `application/json' ) 
[file "/etc/nginx/modsec/coreruleset-3.3.0/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] 
[line "915"] 
[id "920470"] 
[rev ""] 
[msg "Illegal Content-Type header"] 
[data "application/json"] 
[severity "2"] 
  1. „Ungültige HTTP-Anforderungszeile“ – was ist daran ungültig: „POST /livewire/update HTTP/2.0“?
ModSecurity: Warning. Matched "Operator `Rx' with parameter `^(?i:(?:[a-... against variable `REQUEST_LINE' (Value: `POST /livewire/update HTTP/2.0' ) 
[file "/etc/nginx/modsec/coreruleset-3.3.0/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf"] 
[line "47"] 
[id "920100"] 
[msg "Invalid HTTP Request Line"] 
[data "POST /livewire/update HTTP/2.0"]

..und dann wird die Anfrage blockiert

ModSecurity: Access denied with code 403 (phase 2). Matched "Operator `Ge' with parameter `5' against variable `TX:ANOMALY_SCORE' (Value: `13' ) 
[file "/etc/nginx/modsec/coreruleset-3.3.0/rules/REQUEST-949-BLOCKING-EVALUATION.conf"] 
[line "80"] 
[id "949110"] 
[msg "Inbound Anomaly Score Exceeded (Total Score: 13)"] 
[data ""] 
[severity "2"] 

Ich bin also völlig überrascht und weiß nicht, was ich dagegen tun kann, da die Regeln legitim zu sein scheinen, ich aber auch keine Lust habe, irgendwelche davon zu brechen.

verwandte Informationen