在 logstash 中屏蔽信用卡号的中间 6 位数字

Mask middle 6 digits of credit card number in logstash

要求在logstash中显示信用卡的前6位和后4位,并屏蔽剩余的信用卡号码。我应用了 gsub/mutate 过滤器,但替换字符串不允许使用正则表达式。在 logstash 中可以通过其他方式完成吗?

if [message] =~ '\d{16}' {
    mutate {
        gsub => ["message", "\d{6}\d{4}\d{4}", "\d{6}######\d{4}"]
        add_tag => "Masked CardNo"
    }
}

此代码将信用卡 3456902345871092 屏蔽为 \d{6}######\d{4} 但它应屏蔽为 345690######1092。

或者,如果可能,即使只显示卡片的前 6 位或后 4 位数字也会有所帮助。

您可以在正则表达式中使用捕获组并在替换部分使用这些组:此正则表达式 (\d{6})(\d{6})(\d{4}) 在匹配时创建三个组 (see here)。此组可用于替换字符串:###### 此字符串将使用第一个和第三个替换组。

所以在你的情况下,你的配置应该是这样的:

mutate {
    gsub => ["message", "(\d{6})(\d{6})(\d{4})", "######"]
    add_tag => "Masked CardNo"
}

此外,您的正则表达式 \d{6}\d{4}\d{4} 无法匹配 16 位信用卡号,第二个 \d 需要抓取 6 个字符。