Module: ZabbixManager::LogSanitizer
- Defined in:
- lib/zabbix_manager/log_sanitizer.rb
Constant Summary collapse
- REDACTED =
"[FILTERED]"- MAX_STRING_LENGTH =
2_000- SENSITIVE_KEY_NAMES =
"auth|authorization|api_token|community|cookie|http_password|password|passwd|" \ "privatekey|secret|sessionid|snmp_community|snmpv3_authpassphrase|" \ "snmpv3_privpassphrase|tls_psk|tls_psk_identity|token"
- SENSITIVE_KEYS =
/\A(?:#{SENSITIVE_KEY_NAMES})\z/i.freeze
Class Method Summary collapse
-
.sanitize(value) ⇒ Object
递归脱敏结构化对象,并限制字符串长度。.
-
.sanitize_string(value) ⇒ Object
清理字符串中的认证头和常见敏感键值。.
-
.sanitize_url(value) ⇒ Object
移除 URL 中的用户名、密码、查询串和片段。.
-
.sensitive_key?(key) ⇒ Boolean
判断字段名是否属于敏感配置。.
Class Method Details
.sanitize(value) ⇒ Object
递归脱敏结构化对象,并限制字符串长度。
17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/zabbix_manager/log_sanitizer.rb', line 17 def sanitize(value) case value when Hash value.each_with_object({}) do |(key, child), result| result[key] = sensitive_key?(key) ? REDACTED : sanitize(child) end when Array value.map { |child| sanitize(child) } when String sanitize_string(value) else value end end |
.sanitize_string(value) ⇒ Object
清理字符串中的认证头和常见敏感键值。
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/zabbix_manager/log_sanitizer.rb', line 45 def sanitize_string(value) sanitized = value.dup sanitized.gsub!(/\b(Bearer|Basic)\s+[^\s,;]+/i, "\\1 #{REDACTED}") sanitized.gsub!( /((?:authorization)["']?\s*(?:=>|:|=)\s*)[^,;}\]]+/i, "\\1#{REDACTED}" ) sanitized.gsub!( /((?:#{SENSITIVE_KEY_NAMES})["']?\s*(?:=>|:|=)\s*)(["'])(.*?)\2/i, "\\1\\2#{REDACTED}\\2" ) sanitized.gsub!( /((?:#{SENSITIVE_KEY_NAMES})["']?\s*(?:=>|:|=)\s*)(?!["'])[^,;}\]]+/i, "\\1#{REDACTED}" ) sanitized.length > MAX_STRING_LENGTH ? "#{sanitized[0, MAX_STRING_LENGTH]}...[TRUNCATED]" : sanitized end |
.sanitize_url(value) ⇒ Object
移除 URL 中的用户名、密码、查询串和片段。
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/zabbix_manager/log_sanitizer.rb', line 33 def sanitize_url(value) uri = URI.parse(value.to_s) uri.user = nil uri.password = nil uri.query = nil uri.fragment = nil uri.to_s rescue URI::InvalidURIError sanitize_string(value.to_s) end |
.sensitive_key?(key) ⇒ Boolean
判断字段名是否属于敏感配置。
64 65 66 |
# File 'lib/zabbix_manager/log_sanitizer.rb', line 64 def sensitive_key?(key) key.to_s.match?(SENSITIVE_KEYS) end |