Enmascaramiento de datos sensibles
QuietGuard\Monitor\Support\Scrubber enmascara los valores sensibles por clave antes de que nada salga del proceso. Es agnóstico respecto al framework y opera únicamente sobre arrays.
Configurar las claves
Pase los términos a enmascarar al constructor. Se almacenan en minúsculas, y una clave coincide en cuanto su nombre contiene uno de ellos, sin distinguir mayúsculas de minúsculas:
Funcionamiento
scrub(array $data): array recorre el array de forma recursiva. Cuando una clave (de tipo cadena) contiene uno de los términos configurados, todo su valor se sustituye por la constante de máscara; en caso contrario, los arrays anidados se enmascaran a su vez.
Observaciones sobre el comportamiento:
- La máscara es la constante pública
Scrubber::MASK, cuyo valor es'[scrubbed]'. - La comparación se hace sobre el nombre de la clave, no sobre el valor: el scrubber no busca patrones de secretos dentro de las cadenas.
- La comparación es una búsqueda de subcadena sin distinción de mayúsculas: basta con que el nombre de la clave contenga un término configurado, de modo que un
passwordconfigurado también enmascarauser_passwordyPASSWORD_CONFIRMATION. - Una clave que coincide ve todo su valor enmascarado, ya sea un escalar o un array anidado.
- Las claves numéricas / de lista nunca se consideran sensibles; solo las claves de tipo cadena se comparan.
Dónde se aplica
El Reporter ejecuta el scrubber automáticamente:
reportException()enmascara el contexto de la excepción antes del envío.sendLogs()enmascara el array de logs antes del envío.sendDependencies()no enmascara: un manifiesto de dependencias contiene nombres y versiones de paquetes, no secretos.
Si construye los payloads usted mismo, llame a scrub() sobre el array correspondiente antes de confiarlo a un transporte.
La otra mitad: el enmascarado por forma
Un nombre de clave nunca ve una dirección escrita en el texto libre de un mensaje de error, en un segmento de URL o en un campo que alguien llamó reference. Support\ValueRedactor lee el valor, y el Reporter lo aplica a todo el payload como última operación antes del envío, tanto en excepciones como en logs.
Viene activo, con email, iban, nir, card y phone. Las formas que llevan un dígito de control se verifican en vez de solo reconocerse, de modo que una referencia de pedido de dieciséis dígitos no se toma por un número de tarjeta, y cada máscara nombra lo que ocultó ([redacted:email]) para que el mensaje siga siendo legible. Se configura desde Config: redact elige las formas, customRedactions añade las suyas.
Está leyendo la documentación PHP Core v1.0.