es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SonarQube regex punto caliente de seguridad

Estamos utilizando una expresión regular que admite MM/DD/YYYY (o) DD/MM/YYYY (o) M/D/YYYY. La expresión regular es obj.matches(".*\\d+\\/\\d+\\/[0-9]{4}.*")

Pero recientemente, cuando introdujimos SonarQube en nuestra compilación, está fallando debido a esta expresión regular (expresión regular con retroceso catastrófico). ¿Hay alguna otra expresión regular que se pueda usar?

Estamos utilizando java-11.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay otras expresiones regulares que se pueden utilizar que están optimizadas para evitar la retrotrazabilidad catastrófica. Una opción es utilizar la alternancia para coincidir con los diferentes formatos de fecha por separado, así:

    (\\d{1,2}/\\d{1,2}/\\d{4})|(\\d{4}-\\d{2}-\\d{2})

    Este patrón coincidirá con MM/DD/YYYY o DD/MM/YYYY o YYYY-MM-DD. Otra opción es utilizar un patrón sin retrotrazabilidad utilizando grupos atómicos, así:

    ^(?>.*)(\\d{1,2}/\\d{1,2}/\\d{4}|\\d{4}-\\d{2}-\\d{2})(?<=[^/\\d]\\d)(?>.*)$

    Este patrón coincidirá con MM/DD/YYYY o DD/MM/YYYY o YYYY-MM-DD evitando la retrotrazabilidad catastrófica. Utiliza grupos atómicos para evitar la retrotrazabilidad y búsqueda anticipada para asegurarse de que la fecha no sea parte de otro número o cadena.

    Es importante probar cualquier expresión regular exhaustivamente con sus datos de entrada para asegurarse de que funcione correctamente y no cause problemas de rendimiento.

Comments are closed.