Un analizador estático para escanear el código JavaScript y TypeScript para expresiones regulares problemáticas.
El escáner está disponible como una imagen de contenedor que puede ejecutar contra cualquier proyecto JavaScript o TypeScript. Por ejemplo, para escanear el directorio actual:
docker run --rm -v $( pwd ) :/project docker.io/ericornelissen/js-re-scan:latestNota: Para usar Podman en lugar de Docker, puede reemplazar
dockerporpodmanen cualquier comando de ejemplo.
Si es necesario, puede ignorar ciertos archivos o directorios utilizando la opción --ignore-pattern . Por ejemplo, para ignorar el código proveedor para centrarse en los problemas en su propio proyecto que puede usar:
docker run --rm -v $( pwd ) :/project docker.io/ericornelissen/js-re-scan:latest
--ignore-pattern vendor/El escáner tiene los siguientes códigos de salida.
| Código de salida | Significado |
|---|---|
| 0 | No se encontraron problemas |
| 1 | Archivos con expresiones regulares problemáticas encontradas |
| 2 | Algo salió mal mientras escaneaba |
Si ha encontrado que este escáner es útil, considere usar Eslint-Plugin-Regexp. Este complemento de Eslint es lo que alimenta el escáner, y puede integrarse mejor con los flujos de trabajo existentes de su proyecto.
Siga estos pasos para actualizar su configuración de Eslint para cubrir lo que hace este escáner:
Instale el complemento:
npm install --save-dev eslint-plugin-regexpActualice su configuración de Eslint:
Eslint V9 con configuración plana:
import regexp from "eslint-plugin-regexp" ;
// ... other plugins you're already using
export default [
{
files : [ "**/*.{js,jsx,cjs,mjs,ts,cts,mts}" ] ,
plugins : {
regexp ,
} ,
rules : {
"regexp/no-super-linear-backtracking" : [
"error" ,
{
"report" : "certain"
}
] ,
"regexp/no-super-linear-move" : [
"error" ,
{
"ignorePartial" : false ,
"ignoreSticky" : false ,
"report" : "certain"
}
]
}
}
// ... rest of your configuration
] ;Eslint v8 y la configuración anterior o heredada:
# .eslintrc.yml or similar
plugins :
# ... other plugins you're already using
- regexp
rules :
# ... other rules you already configured
regexp/no-super-linear-backtracking :
- error
- report : certain
regexp/no-super-linear-move :
- error
- ignorePartial : false
ignoreSticky : false
report : certain
# ... rest of your configuration // .eslintrc.json, .eslintrc.js or similar
{
"plugins" : [
// ... other plugins you're already using
"regexp"
] ,
"rules" : {
// ... other rules you already configured
"regexp/no-super-linear-backtracking" : [
"error" ,
{
"report" : "certain"
}
] ,
"regexp/no-super-linear-move" : [
"error" ,
{
"ignorePartial" : false ,
"ignoreSticky" : false ,
"report" : "certain"
}
]
}
// ... rest of your configuration
} Si lo desea, puede construir el escáner desde cero. Desde la raíz de este proyecto, ejecute algo como:
docker build --file Containerfile .O utilice el objetivo de la conveniencia:
make build ENGINE=dockerEste escáner tiene como objetivo proporcionar a los desarrolladores una herramienta para encontrar una expresión regular vulnerable en su código. Como tal, el objetivo es solo informar los verdaderos positivos . El resultado es que todos los hallazgos son relevantes, pero un informe limpio no significa que su proyecto no tenga expresiones regulares vulnerables.
Esto contrasta con herramientas como Redos Detector, que encontrará expresiones regulares vulnerables que este escáner no hará, pero también informa falsos positivos . Como es difícil determinar si un informe en particular es un falso positivo, otras herramientas son difíciles de usar.
Este escáner ejecuta Eslint con el complemento Eslint-Plugin-ReGEXP para encontrar e informar sobre expresiones regulares que violen las reglas con implicaciones de seguridad.
El soporte de TypeScript es proporcionado por @TypeScript-eslint/PARSer, el soporte de Markdown es proporcionado por @eslint/markdown.
Este proyecto tiene licencia bajo la licencia Apache 2.0, consulte la licencia para el texto completo de la licencia. El texto de documentación tiene licencia bajo CC BY-SA 4.0.
Abra un problema si encontró un error o si tiene una sugerencia sobre cómo mejorar la documentación.