当 URL 包含无效字符时,有什么方法可以解析 URIPATHPARAM
Is there any way to grok parse URIPATHPARAM when the URL contains invalid characters
快速背景:使用来自 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 并丢弃垃圾?
是的,通过使用 grok 的多重匹配能力。
https://groups.google.com/forum/#!topic/logstash-users/H3_3gnWY2Go
与break_on_match => true
(默认)结合使用时,您可以指定多个模式供 grok 尝试,它会在找到匹配模式并应用后停止。
在这里,如果第一个模式不起作用,它将尝试下一个使用 NOTSPACE 的模式,这将吃掉那些坏字符,并标记字段 bad_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
}
}
快速背景:使用来自 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 并丢弃垃圾?
是的,通过使用 grok 的多重匹配能力。
https://groups.google.com/forum/#!topic/logstash-users/H3_3gnWY2Go
与break_on_match => true
(默认)结合使用时,您可以指定多个模式供 grok 尝试,它会在找到匹配模式并应用后停止。
在这里,如果第一个模式不起作用,它将尝试下一个使用 NOTSPACE 的模式,这将吃掉那些坏字符,并标记字段 bad_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
}
}