61 ,
pattern(p, std::regex::icase | std::regex::optimize)
128 std::string_view name,
129 std::string_view regex_pattern,
130 std::string_view replacement =
"[REDACTED]",
131 bool preserve_partial =
false) {
134 std::string(regex_pattern),
135 std::string(replacement),
149 return rule.name == name;
160 std::string
sanitize(std::string_view input)
const {
162 return std::string(input);
165 std::string
result(input);
166 for (
const auto& rule :
rules_) {
178 for (
const auto& rule :
rules_) {
179 if (std::regex_search(input.begin(), input.end(), rule.pattern)) {
191 std::vector<std::string> names;
192 names.reserve(
rules_.size());
193 for (
const auto& rule :
rules_) {
194 names.push_back(rule.name);
229 R
"(\b(\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?)(\d{4})\b)",
239 R
"(\b(\d{3})[-\s]?(\d{2})[-\s]?(\d{4})\b)",
248 R
"(\b(sk[-_]|api[-_]|key[-_]|token[-_]|bearer\s+)([a-zA-Z0-9]{16,})\b)",
257 R
"(((?:password|passwd|pwd|secret|credential)[\s]*[=:]\s*)([^\s&]+))",
266 R
"(\b([a-zA-Z0-9._%+-])([a-zA-Z0-9._%+-]*)(@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})\b)",
275 R
"(\b(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\b)",
284 R
"(\b(\+?\d{1,3}[-.\s]?)(\d{3})[-.\s]?(\d{3})[-.\s]?(\d{4})\b)",
Log sanitizer for masking sensitive data.
log_sanitizer & remove_pattern(std::string_view name)
Remove a pattern by name.
log_sanitizer & add_common_patterns()
Add all common patterns at once.
void add_api_key_pattern()
bool contains_sensitive_data(std::string_view input) const
Check if a string contains sensitive data.
log_sanitizer & add_pattern(sensitive_data_type type)
Add a built-in pattern for sensitive data detection.
log_sanitizer & clear()
Clear all patterns.
static std::string apply_rule(const std::string &input, const sanitization_rule &rule)
log_sanitizer & add_custom_pattern(std::string_view name, std::string_view regex_pattern, std::string_view replacement="[REDACTED]", bool preserve_partial=false)
Add a custom sanitization pattern.
void add_credit_card_pattern()
void add_ip_address_pattern()
void add_phone_number_pattern()
std::vector< sanitization_rule > rules_
std::vector< std::string > active_patterns() const
Get list of active pattern names.
std::string sanitize(std::string_view input) const
Sanitize a string by masking all detected sensitive data.
void add_password_pattern()
sensitive_data_type
Types of sensitive data that can be automatically detected.
@ api_key
API keys (sk-, api_, bearer tokens)
@ phone_number
Phone numbers (various formats)
@ ip_address
IPv4 addresses.
@ password
Password fields in key=value format.
@ custom
Custom user-defined patterns.
@ credit_card
Credit card numbers (Visa, MC, Amex, etc.)
@ ssn
Social Security Numbers (US format)
log_sanitizer make_default_sanitizer()
Create a sanitizer with common patterns pre-configured.
Configuration for a sanitization rule.
std::string name
Identifier for the rule.
std::regex pattern
Regex pattern to match.
sanitization_rule(std::string n, const std::string &p, std::string r, bool pp=false)
std::string replacement
Replacement text or pattern.
bool preserve_partial
Keep last N characters visible.