【问题标题】:Extending AuditedAttribute to substitute or mask audited values扩展 AuditedAttribute 以替换或屏蔽审计值
【发布时间】:2019-03-30 10:21:35
【问题描述】:

我使用的是 ABP 版本 3.8.2。我已启用ABP Audit Logging,它工作正常。

是否有任何方法可以用不同的值替换或掩盖审计日志值,以隐藏密码、信用卡详细信息等敏感信息?也许通过扩展 ABP 的 Audited 属性。

请推荐。

【问题讨论】:

  • 我的用例不是隐藏或禁用对敏感值的审计,我的用例是: 1. 用不同的值替换 2. 掩码

标签: c# aspnetboilerplate audit-logging data-masking .net-attributes


【解决方案1】:

是的,您可以替换或屏蔽审计值以隐藏敏感信息。

  1. 实现MaskableAuditSerializer:

    public class MaskableAuditSerializer : IAuditSerializer, ITransientDependency
    {
        private readonly IAuditingConfiguration _configuration;
    
        public MaskableJsonNetAuditSerializer(IAuditingConfiguration configuration)
        {
            _configuration = configuration;
        }
    
        public string Serialize(object obj)
        {
            var options = new JsonSerializerSettings
            {
                ContractResolver = new MaskableAuditingContractResolver(_configuration.IgnoredTypes)
            };
    
            return JsonConvert.SerializeObject(obj, options);
        }
    }
    
  2. 通过继承AuditingContractResolver实现MaskableAuditingContractResolver:

    public class MaskableAuditingContractResolver : AuditingContractResolver
    {
        public MaskableAuditingContractResolver(List<Type> ignoredTypes)
            : base(ignoredTypes)
        {
        }
    
        protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
        {
            var property = base.CreateProperty(member, memberSerialization);
    
            if (member.IsDefined(typeof(MaskedAuditedAttribute)))
            {
                property.ValueProvider = new MaskedValueProvider();
            }
    
            return property;
        }
    }
    
  3. 实现MaskedValueProvider:

    public class MaskedValueProvider : IValueProvider
    {
        public object GetValue(object target)
        {
            return "***";
        }
    
        public void SetValue(object target, object value)
        {
            throw new NotImplementedException();
        }
    }
    
  4. 通过继承AuditedAttribute实现MaskedAuditedAttribute:

    public class MaskedAuditedAttribute : AuditedAttribute
    {
    }
    

用法

public class LoginViewModel
{
    [MaskedAudited]
    public string Password { get; set; }

    // ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2020-02-14
    • 2014-05-11
    相关资源
    最近更新 更多