15 个版本
0.3.7 | 2024 年 6 月 5 日 |
---|---|
0.3.5 | 2024 年 2 月 5 日 |
0.3.4 | 2023 年 9 月 5 日 |
0.3.2 | 2023 年 6 月 30 日 |
0.1.1 | 2022 年 6 月 24 日 |
在 Rust 模式 中排名第 154
每月下载量 5,819 次
用于 44 个 仓库(其中 16 个直接使用)
36KB
634 行
safelog
将数据标记为日志记录目的敏感
某些信息过于敏感,不能常规地写入系统日志,但有时又必须显示。此库提供了一种标记此类信息、条件记录但不默认记录的方法。
示例
有两种主要方法可以标记数据为敏感:通过将其存储在 Sensitive
对象中长期存储,或在其传递给格式化程序之前将其包装在 Sensitive
对象中。
use safelog::{Sensitive, sensitive};
// With this declaration, a student's name and gpa will be suppressed by default
// when passing the student to Debug.
#[derive(Debug)]
struct Student {
name: Sensitive<String>,
grade: u8,
homeroom: String,
gpa: Sensitive<f32>,
}
// In this function, a user's IP will not be printed by default.
fn record_login(username: &str, ip: &std::net::IpAddr) {
println!("Login from {} at {}", username, sensitive(ip));
}
您可以全局(跨所有线程)或局部(跨单个线程)禁用安全日志记录。
# let debug_mode = true;
# let log_encrypted_data = |_|();
# let big_secret = ();
use safelog::{disable_safe_logging, with_safe_logging_suppressed};
// If we're running in debug mode, turn off safe logging
// globally. Safe logging will remain disabled until the
// guard object is dropped.
let guard = if debug_mode {
// This call can fail if safe logging has already been enforced.
disable_safe_logging().ok()
} else {
None
};
// If we know that it's safe to record sensitive data with a given API,
// we can disable safe logging temporarily. This affects only the current thread.
with_safe_logging_suppressed(|| log_encrypted_data(big_secret));
一个示例部署
此库最初是为在 arti
项目中使用而创建的,该项目尝试在 Rust 中实现 Tor 隐私协议。在 arti
中,我们希望避免默认记录可能损害用户匿名性或创建攻击用户和中继以访问其日志的动机的信息。
通常,Arti 将以下信息视为 Sensitive
- 客户端地址。
- 客户端请求的目标(目标地址)。
Arti 不将所有私有信息都标记为 Sensitive
:当信息永远不适用于日志记录时,我们将完全省略它。
许可:MIT OR Apache-2.0
依赖关系
~0.8–1.4MB
~31K SLoC