使用正则表达式从日志中删除敏感信息

Removing sensitive informations from the logs using regex

在我的 Ruby 应用程序中,我有以下正则表达式可以帮助我从日志中删除敏感信息:

/(\"|")secure[^:]+:\s*.*?/

当日志中包含以下信息时有效:

{"secure_data": "Test"}

但是当我在日志中有对象而不是字符串时它不起作用:

{"secure_data": {"name": "Test"}}

如何更新正则表达式以适用于这两种情况?

https://rubular.com/r/h9EBZot1e7NUkS

以下应该适用于您要执行的操作。不过,我建议使用 json 解析器。

{"secure[^:]*?:\s({?(?:(?:,[^"]*?)?"[^"]*?"(?::\s"[^"]*?")?)*?)*?}?}

使用此正则表达式,secure_data 中的对象也可能包含多个键值(字符串)对。它仍然会匹配。其他对象不会。

您可以将此正则表达式与否定字符 类 和一个替代字符一起使用:

"secure[^:]+:\s*(?:"[^"]*"|{[^}]*})

在非捕获组 (?:"[^"]*"|{[^}]*}) 中,我们正在匹配带引号的字符串或以 { 开头并以 } 结尾的对象。

Update RegEx Demo