You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从JSON字符串中移除指定属性?Web API审计日志安全需求

解决Web API审计日志中移除JSON密码属性的问题

嘿,我明白你在为Web API审计日志做脱敏处理时遇到的问题了——要从登录请求的JSON里移除password属性,避免敏感信息被记录对吧?咱们先看看你现有代码的问题,再给出正确的解决方案~

问题根源

你的请求负载是一个JSON对象:

{"code":"medics1","username":"admin","password":"password"}

但你用了JArray.Parse()去解析它,JArray是用来处理JSON数组(比如[{}, {}, ...])的,所以这一步解析后其实没法正确定位到password属性,自然移除操作也就不生效了。

正确的代码实现

应该用JObject.Parse()来解析单个JSON对象,之后再移除password属性:

// 解析JSON对象(替换成你的实际payload变量)
var payload = JObject.Parse(objQueue.payload);
// 移除password属性
payload.Remove("password");
// 可选:转成清理后的JSON字符串用于日志记录
string sanitizedLogPayload = payload.ToString();

额外优化建议

如果你的API请求可能存在嵌套结构(比如某个子对象里也有password字段),可以写个递归方法来批量清理所有层级的敏感属性:

private static void RemoveSensitiveProperties(JToken token)
{
    if (token.Type == JTokenType.Object)
    {
        JObject obj = (JObject)token;
        // 移除当前对象的password属性
        obj.Remove("password");
        // 递归处理子对象
        foreach (var child in obj.Children().ToList())
        {
            RemoveSensitiveProperties(child);
        }
    }
    else if (token.Type == JTokenType.Array)
    {
        JArray array = (JArray)token;
        // 递归处理数组里的每个元素
        foreach (var item in array.ToList())
        {
            RemoveSensitiveProperties(item);
        }
    }
}

// 使用方式
var payload = JObject.Parse(objQueue.payload);
RemoveSensitiveProperties(payload);
string sanitizedLogPayload = payload.ToString();

这样不管是顶层还是嵌套的password属性,都会被统一移除,更安全可靠~

内容的提问来源于stack exchange,提问作者Nayan Rudani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:25:18