gpt4 book ai didi

json - 如何屏蔽 JSON 中的敏感值以进行日志记录

转载 作者:行者123 更新时间:2023-12-04 19:01:03 25 4
gpt4 key购买 nike

我有几个类似的 JSON 结构,我想将它们写入 SQL 表以进行日志记录。但是,JSON 中的某些字段包含敏感信息,我想部分屏蔽这些信息,以便日志中看不到完整值。

以下是其中一种 JSON 结构的示例:

{
"Vault": 1,
"Transaction": {
"gateway": {
"Login": "Nick",
"Password": "Password"
},
"credit_card": {
"number": "4111111111111"
}
}
}

在这种情况下,我试图更改 4111信用卡号,使其看起来像 4xxx1111在 JSON 中。我正在使用 Newtonsoft 并将 JSON 反序列化为 JObject ,但我被困在如何掩盖值(value)。我认为线索与 JToken 有关,但还没想好。我想让解决方案尽可能通用,以便它可以与我可能需要注销的任何 JSON 结构一起使用。

任何帮助,将不胜感激。

最佳答案

这是我认为我会采取的方法:

  • 制作一个辅助方法,该方法可以采用字符串值并以您对日志所需的方式隐藏它。也许是这样的,例如:
    public static string Obscure(string s)
    {
    if (string.IsNullOrEmpty(s)) return s;
    int len = s.Length;
    int leftLen = len > 4 ? 1 : 0;
    int rightLen = len > 6 ? Math.Min((len - 6) / 2, 4) : 0;
    return s.Substring(0, leftLen) +
    new string('*', len - leftLen - rightLen) +
    s.Substring(len - rightLen);
    }
  • 制作另一个可以接受 JToken 的辅助方法以及 JSONPath 的列表表达式。在此方法中,使用 SelectTokens 将每个路径与 token 的内容进行匹配。 .对于找到的每个匹配项,使用第一个辅助方法将敏感值替换为隐藏版本。
    public static void ObscureMatchingValues(JToken token, IEnumerable<string> jsonPaths)
    {
    foreach (string path in jsonPaths)
    {
    foreach (JToken match in token.SelectTokens(path))
    {
    match.Replace(new JValue(Obscure(match.ToString())));
    }
    }
    }
  • 最后,为要在期望获得的所有 JSON 主体中隐藏的值编译 JSONPath 表达式列表。从上面的示例 JSON 中,我认为您想隐藏 Password无论发生在哪里和 number如果它发生在 credit_card 内.表示为 JSONPath,这些将是 $..Password$..credit_card.number , 分别。 (请记住,JSONPath 表达式在 Json.Net 中区分大小写。)获取此列表并将其放入某处的配置设置中,以便您可以在需要时轻松更改它。
  • 现在,每当您想注销一些 JSON 时,只需执行以下操作:
    JToken token = JToken.Parse(json);
    string[] jsonPaths = YourConfigSettings.GetJsonPathsToObscure();
    ObscureMatchingValues(token, jsonPaths);
    YourLogger.Log(token.ToString(Formatting.None));

  • 演示 fiddle : https://dotnetfiddle.net/dGPyJF

    关于json - 如何屏蔽 JSON 中的敏感值以进行日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37821298/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com