如何屏蔽 json 字符串中存在的密码?
Posted
技术标签:
【中文标题】如何屏蔽 json 字符串中存在的密码?【英文标题】:How to mask password exist in json string? 【发布时间】:2021-06-26 02:23:45 【问题描述】:我正在为我的 API 响应开发 .net core c# 日志记录项目。 输出为 JSON 格式,响应包含敏感信息(例如密码)
当响应输出包含更复杂的带有数组的 Json 结构时,我被卡住了,其项目是复杂对象,每个对象都有一个“id”属性和表示敏感字段的关键字,显示为该“id”字段的值(请参阅下面的示例)。
对于以下输出,如果 "id" 的值包含单词 'password' ,我如何使用 RegEx 将密码值替换为 'XXXX' 。例如...下面有需要屏蔽的值...
"type": "CatalogResourceRequest",
"description": null,
"reasons": null,
"data":
"customProperties": [
"data":
"id": "CloneFrom",
"is_hidden": false,
"value": "TMPLABC"
,
"data":
"id": "Debug",
"is_hidden": false,
"value": false
,
"data":
"id": "abc_password",
"is_hidden": false,
"value": "This_Is_Password_To_Be_Masked"
,
"data":
"id": "password_of_user1",
"is_hidden": false,
"value": "This_Is_Password_To_Be_Masked_Also"
]
【问题讨论】:
如果您使用 Serilog 记录到 JSON,您应该知道此功能已经存在:github.com/sandermvanvliet/Serilog.Enrichers.Sensitive asp.net core的版本是多少?你用的是哪个序列化器,Json.Net 还是 System.Text.Json? How to mask sensitive values in JSON for logging purposes 的可能重复项 - 假设您使用的是 Json.Net 【参考方案1】:这是一个使用 Json.Net 的工作演示:
[HttpGet]
public IActionResult Index()
var data = System.IO.File.ReadAllText("test.json");
var json = ToObject(data);
return Ok(json);
public object ToObject(string json)
if (string.IsNullOrEmpty(json))
return null;
return ToObject(JToken.Parse(json));
public object ToObject(JToken token)
switch (token.Type)
case JTokenType.Object:
return token.Children<JProperty>()
.ToDictionary(prop => prop.Name,
prop => ToObject(prop.Value),
StringComparer.OrdinalIgnoreCase);
case JTokenType.Array:
return token.Select(ToObject).ToList();
case JTokenType.Null:
return null;
default:
if(((JValue)token).Value.ToString().Contains("password"))
ViewBag.Id = true;
return ((JValue)token).Value;
if(((JProperty)token.Parent).Name== "value" && ViewBag.Id!=null)
if(ViewBag.Id)
ViewBag.Id = false;
return "XXXXX";
return ((JValue)token).Value;
return ((JValue)token).Value;
顺便说一句,您提供的 json 不正确,应该如下所示:
"type": "CatalogResourceRequest",
"description": null,
"reasons": null,
"data":
"customProperties": [
"data":
"id": "CloneFrom",
"is_hidden": false,
"value": "TMPLABC"
,
"data":
"id": "Debug",
"is_hidden": false,
"value": false
,
"data":
"id": "abc_password",
"is_hidden": false,
"value": "This_Is_Password_To_Be_Masked"
,
"data":
"id": "password_of_user1",
"is_hidden": false,
"value": "This_Is_Password_To_Be_Masked_Also"
]
【讨论】:
以上是关于如何屏蔽 json 字符串中存在的密码?的主要内容,如果未能解决你的问题,请参考以下文章