Class: CloseYourIt::Scrubber
- Inherits:
-
Object
- Object
- CloseYourIt::Scrubber
- Defined in:
- lib/closeyourit/scrubber.rb
Overview
Rimozione PII dai payload: filtro chiavi sensibili, normalizzazione SQL, scrub messaggi. Privacy-by-default — vedi PDR §9.
Constant Summary collapse
- FILTERED =
"[FILTERED]"- DENYLIST =
Token di chiavi sempre redatti (match per sottostringa, normalizzato). Allineato al regex SENSITIVE_KEY di backend e client Dart (parità client-side) — vedi Errors/Logs::Ingest::Normalize::SENSITIVE_KEY. Copre credenziali/segreti e PII:
/pass|secret|token|api[_-]?key|apikey|authorization|cookie|csrf|credit|card|cvv|ssn|iban| email|phone|telephone|mobile|dob|birth|passport|bearer|session|pin|pan/ipasscopre password/passwd/pass_code/passkey/passphrase;cookiecopre set-cookie;credit+cardcoprono credit_card;phonecopre telephone/smartphone;birthcopre date_of_birth. Match per sottostringa → privilegia l'over-redaction (privacy-by-default): p.es.company_name(contienepan) oshipping(contienepin) vengono redatti — è accettabile, meglio redigere troppo che perdere PII. CYRB-3: la lista ometteva email/phone/dob → i bind delle query lente li leakavano nel pannello. %w[ pass secret token api_key apikey authorization cookie csrf credit card cvv ssn iban email phone telephone mobile dob birth passport bearer session pin pan ].freeze
- STRING_LITERAL =
/'(?:[^']|'')*'/- NUMERIC_LITERAL =
/\b\d+(?:\.\d+)?\b/
Instance Method Summary collapse
-
#filter_params(value) ⇒ Object
Filtra ricorsivamente Hash/Array sostituendo i valori delle chiavi sensibili.
-
#filter_value(key, value) ⇒ Object
Valore di un singolo bind/argomento: redatto se il nome (colonna/parametro) è sensibile.
-
#initialize(configuration) ⇒ Scrubber
constructor
A new instance of Scrubber.
-
#obfuscate_sql(sql) ⇒ Object
Maschera i literal (stringa/numerici) nello SQL, preservando la struttura.
- #scrub_message(message) ⇒ Object
Constructor Details
#initialize(configuration) ⇒ Scrubber
Returns a new instance of Scrubber.
29 30 31 |
# File 'lib/closeyourit/scrubber.rb', line 29 def initialize(configuration) @configuration = configuration end |
Instance Method Details
#filter_params(value) ⇒ Object
Filtra ricorsivamente Hash/Array sostituendo i valori delle chiavi sensibili.
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/closeyourit/scrubber.rb', line 34 def filter_params(value) case value when Hash value.each_with_object({}) do |(key, val), acc| acc[key] = sensitive_key?(key) ? FILTERED : filter_params(val) end when Array value.map { |item| filter_params(item) } else value end end |
#filter_value(key, value) ⇒ Object
Valore di un singolo bind/argomento: redatto se il nome (colonna/parametro) è sensibile.
63 64 65 |
# File 'lib/closeyourit/scrubber.rb', line 63 def filter_value(key, value) sensitive_key?(key) ? FILTERED : value end |
#obfuscate_sql(sql) ⇒ Object
Maschera i literal (stringa/numerici) nello SQL, preservando la struttura.
48 49 50 51 52 |
# File 'lib/closeyourit/scrubber.rb', line 48 def obfuscate_sql(sql) return sql if sql.nil? || !@configuration.obfuscate_sql sql.to_s.gsub(STRING_LITERAL, "?").gsub(NUMERIC_LITERAL, "?") end |
#scrub_message(message) ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/closeyourit/scrubber.rb', line 54 def () return if .nil? @configuration..reduce(.to_s) do |acc, pattern| acc.gsub(pattern, FILTERED) end end |