防止敏感数据泄露

主要观点:Go 默认可轻松格式化、记录或输出多数类型的值,但处理敏感值时会有问题,如用户提交的明文密码等。
关键信息

  • 未导出字段不足以防止敏感值泄露,其他包可通过反射或unsafe包访问。
  • 可通过实现特定接口防止数据泄露,如fmt.Formatterslog.Valuerencoding.TextMarshaler等。
  • 推荐返回特定字符串(如<!SECRET_REDACTED!>)用于标记意外泄露的敏感数据,并设置警报检测。
    重要细节
  • fmt.Formatter接口可确定类型的格式化方式,实现后返回硬编码值可防止fmt.Println等函数泄露敏感数据。
  • slog.Valuer接口用于在结构化日志中隐藏值,返回硬编码值或空字符串可防止敏感值被记录。
  • encoding.TextMarshaler接口用于控制文本编码,实现后可防止jsonxml包泄露非结构体类型的敏感值,也可分别实现json.Marshalerxml.Marshaler
  • 在示例 Web 应用中使用这些解决方案防止原始密码意外被记录。
阅读 13
0 条评论