Pregunta

En nuestros registros, estamos viendo números de tarjetas de crédito debido a que las personas golpean algunos de los ULR en nuestra aplicación con información CC (no tengo idea de por qué están haciendo esto). Queremos desinfectar esta información (debido a consideraciones de PCI) y ni siquiera persistirla en el disco.

Por lo tanto, quiero poder desinfectar la entrada de registro antes de que llegue al archivo de registro. He estado mirando las válvulas Tomcat (válvula de registro de acceso). ¿Es este el camino a seguir?

¿Fue útil?

Solución

Pude resolver este problema extendiendo AccessLogValve y anulación public log(java.lang.String message):

public class SanitizedAccessLogValve extends AccessLogValve {

    private static Pattern pattern = Pattern.compile("\\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})\\b");

    /*
     This method will sanitize any cc numbers in the string and replace them with x's
    */
    private String sanitize(String string) {
        String sanitizedString = string;

        if(string != null) {

            StringBuffer buffer = new StringBuffer();
            Matcher matcher = pattern.matcher(string);

            while(matcher.find()) {
                MatchResult matchResult = matcher.toMatchResult();

                int start = matchResult.start();
                int end = matchResult.end();

                String matchedText = string.substring(start, end);

                matcher.appendReplacement(buffer, "xxxxxxxxxxxxxxxx");                
            }

            matcher.appendTail(buffer);

            sanitizedString = buffer.toString();
        }

        return sanitizedString;
    }

    @Override
    public void log(String message) {
        super.log(sanitize(message));
    }
}

Debe compilar esto en un frasco y luego poner ese archivo jar en $CATALINA_HOME/lib.

Entonces en tu server.xml:

<Valve className="my.valves.SanitizedAccessLogValve"
       directory="access_logs"  prefix="localhost." suffix=".log"
       pattern='%v %h %t "%r" %s %B %T "%{User-Agent}i"'/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top