Logstash 当URL包含无效字符时,是否有任何方法可以解析URIPATHPARAM
快速背景:从HAProxy使用访问日志记录,并使用grok对其进行解析。HAProxy的%{+Q}r日志变量打印我们正在使用的Logstash 当URL包含无效字符时,是否有任何方法可以解析URIPATHPARAM,logstash,haproxy,grok,Logstash,Haproxy,Grok,快速背景:从HAProxy使用访问日志记录,并使用grok对其进行解析。HAProxy的%{+Q}r日志变量打印我们正在使用的“” "%{WORD:method} %{URIPATHPARAM:url} HTTP/%{NUMBER:httpversion}" 这适用于大多数请求,但当我们被各种扫描器击中,试图通过在URL中发送垃圾来进行注入攻击时,grok无法解析uri。下面是一些使grok筛选器崩溃的示例: "GET /index.html?14068'#22><bla>
“”
"%{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"
“GET/index.html?14068”#22>HTTP/1.1”
“GET/index.html?fName=\Windows\system.ini%00&lName=&guestEmail=HTTP/1.1”
有人能想出一个解决方案,它最好能解析无效的URI,或者至少不会崩溃,即解析尽可能多的URL并丢弃垃圾吗?是的,使用grok的多重匹配功能 当与
break\u on\u match=>true
(默认值)结合使用时,您可以指定多个模式供grok尝试,它将在找到匹配模式并应用该模式后停止
在这里,如果第一个模式不起作用,它将尝试使用NOTSPACE的下一个模式,该模式将吃掉那些坏字符,并标记字段bad\u url
,而不是url
filter {
grok {
match => {
"message" => [
"%{WORD:method} %{URIPATHPARAM:url} HTTP/%{NUMBER:httpversion}",
"%{WORD:method} %{NOTSPACE:bad_url} HTTP/%{NUMBER:httpversion}"
]
}
break_on_match => true
}
}
有趣的是,您的第一个示例并没有破坏我的观点,但我明白您的观点。如果您想保留名为url的字段,您可以稍后使用一个变异过滤器,将
坏url
重命名为url
,并添加一个标记,表明如果坏url
存在,它就是坏url