Kusto -在字符串函数中是否有替换多个/解析unicode ?



我正在与AZ/KQL一起工作,我试图找出是否有一个函数能够替换字符串中的多个值,或者(更好的是)一个函数将unicode替换为日志行中的字符串。

例如,我有日志:

["u0027"u003eu003csvg/onload=alert(document.domain)u003e"]

我需要将u0027值替换为字符串,因此,例如此日志,理想情况下最终看起来像:

["'"><svg/onload=alert(document.domain)>"]

对于上下文,日志源是AWS连接器的AZ哨兵,它似乎没有一个功能(我想也许我错过了这个功能),但对我来说,它看起来像CloudTrail不能处理日志文件中的真实值,所以默认为Unicode,但解析它们在这方面似乎不可能。

我尝试了unicode_codepoints_to_string(), replace_string(), iff/iif(),然后是replace_string(),下面的代码:

| extend parsd = iff(tolower(AdditionalEventData) contains @'u003e', replace_string(tostring(AdditionalEventData),@'u003e',@'>'), AdditionalEventData)
| extend parsd = iff(tolower(parsd) contains @'u003c', replace_string(tostring(AdditionalEventData),@'u003c',@'<'), parsd)

| extend parsd = replace_regex(AdditionalEventData,@'U+.d{1,5}',unicode_codepoints_to_string(AdditionalEventData))

我尝试了已弃用的make_string()操作符,但是再次,所有这些都是针对整个字符串的,我猜我需要做某种索引(子字符串)(但我对这些操作符并不都有经验。

我甚至打算尝试单独替换成单独的列,然后使用strcat(),但这似乎是一个非常极端的路线,将永远占用所有的unicode字符,以及然后将它们strcat()返回到单个列。

有谁知道一个好的解决方案吗?任何帮助都将非常感激。谢谢您的阅读。

我强烈建议在摄入前修复这个问题。

print log = @'["u0027"u003eu003csvg/onload=alert(document.domain)u003e"]'
| mv-apply parts = extract_all(@"(.*?)(\u[[:xdigit:]]{4}|$)", log) on 
( 
summarize fixed_log = array_strcat(make_list(strcat(parts[0], iff(isnotempty(parts[1]), unicode_codepoints_to_string(toint(strcat("0x", substring(parts[1], 2, 4)))), ""))), "")
)
+----------------------------------------------------------------+--------------------------------------------+
|                              log                               |                 fixed_log                  |
+----------------------------------------------------------------+--------------------------------------------+
| ["u0027"u003eu003csvg/onload=alert(document.domain)u003e"] | ["'"><svg/onload=alert(document.domain)>"] |
+----------------------------------------------------------------+--------------------------------------------+

小提琴

最新更新