Краткая предыстория: использование логирования доступа из HAProxy и его разбор с помощью grok. Переменная журнала HAProxy %{+Q}r выводит "<http verb> <uri> <HTTP version>"
, которую мы анализируем с помощью
"%{WORD:method} %{URIPATHPARAM:url} HTTP/%{NUMBER:httpversion}"
Это отлично работает для большинства запросов, но когда мы сталкиваемся с различными типами сканеров, пытающихся проводить атаки путем внедрения и т. д., отправляя мусор в URL, grok не может проанализировать uri. Вот несколько примеров, которые приводят к сбою этого фильтра grok:
"GET /index.html?14068'#22><bla> HTTP/1.1"
"GET /index.html?fName=\Windows\system.ini%00&lName=&guestEmail= HTTP/1.1"
Может ли кто-нибудь придумать решение, которое предпочтительно анализировало бы даже недопустимые URI или, по крайней мере, не приводило к сбоям, то есть анализировало бы как можно больше URL-адресов и отбрасывало мусор?