【问题标题】:Removing sensitive informations from the logs using regex使用正则表达式从日志中删除敏感信息
【发布时间】:2020-01-03 08:04:43
【问题描述】:

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

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

当日志中有以下信息时,它会起作用:

{"secure_data": "Test"}

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

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

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

https://rubular.com/r/h9EBZot1e7NUkS

【问题讨论】:

  • 不要使用 RegEx 解析 JSON。请改用适当的解析器。
  • 您可以使用:"secure[^:]+:\s*(?:"[^"]*"|{[^}]*}) 或查看:rubular.com/r/pdx04bSICE4xQX

标签: regex rubular


【解决方案1】:

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

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

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

Update RegEx Demo

【讨论】:

    【解决方案2】:

    以下内容应该适用于您正在尝试做的事情。不过我建议使用 json 解析器。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2018-07-01
      • 1970-01-01
      • 2011-12-19
      • 2011-10-03
      相关资源
      最近更新 更多