Un analyseur statique pour scanner le code JavaScript et TypeScript pour des expressions régulières problématiques.
Le scanner est disponible en tant qu'image de conteneur que vous pouvez exécuter contre tout projet JavaScript ou TypeScript. Par exemple, pour scanner le répertoire actuel:
docker run --rm -v $( pwd ) :/project docker.io/ericornelissen/js-re-scan:latestRemarque: Pour utiliser Podman au lieu de Docker, vous pouvez remplacer
dockerparpodmandans n'importe quel exemple de commande.
Si nécessaire, vous pouvez ignorer certains fichiers ou répertoires à l'aide de l'option --ignore-pattern . Par exemple, pour ignorer le code vendu pour se concentrer sur les problèmes dans votre propre projet, vous pouvez utiliser:
docker run --rm -v $( pwd ) :/project docker.io/ericornelissen/js-re-scan:latest
--ignore-pattern vendor/Le scanner a les codes de sortie suivants.
| Code de sortie | Signification |
|---|---|
| 0 | Aucun problème trouvé |
| 1 | Fichiers avec des expressions régulières problématiques trouvées |
| 2 | Quelque chose s'est mal passé pendant la numérisation |
Si vous avez trouvé ce scanner utile, envisagez d'utiliser plutôt Eslint-Plugin-Regexp. Ce plugin Eslint est ce qui alimente le scanner, et il peut mieux s'intégrer aux workflows existants de votre projet.
Suivez ces étapes pour mettre à jour votre configuration Eslint pour couvrir ce que fait ce scanner:
Installez le plugin:
npm install --save-dev eslint-plugin-regexpMettez à jour votre configuration Eslint:
Eslint V9 avec configuration plate:
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 et configation antérieure ou héritée:
# .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 vous le souhaitez, vous pouvez construire le scanner à partir de zéro. Depuis la racine de ce projet, il y a quelque chose comme:
docker build --file Containerfile .Ou utilisez la commodité de la cible:
make build ENGINE=dockerCe scanner vise à fournir aux développeurs un outil pour trouver une expression régulière vulnérable dans leur code. En tant que tel, l'objectif est de ne signaler que de vrais positifs . Le résultat est que toutes les résultats sont pertinents, mais un rapport propre ne signifie pas que votre projet n'a pas d'expressions régulières vulnérables.
Cela contraste avec des outils comme RedOS-détecteur, qui trouveront des expressions régulières vulnérables que ce scanner ne sera pas, mais rapporte également de faux positifs . Comme il est difficile de déterminer si un rapport particulier est un faux positif, d'autres outils sont difficiles à utiliser.
Ce scanner exécute Eslint avec le plugin Eslint-Plugin-Regexp pour trouver et signaler des expressions régulières qui violent les règles avec les implications de sécurité.
La prise en charge de TypeScript est fournie par @ TypeScript-eslint / Parser, la prise en charge de Markdown est fournie par @ Eslint / Markdown.
Ce projet est concédé sous licence Apache 2.0, voir Licence pour le texte complet de la licence. Le texte de la documentation est concédé sous licence en vertu de CC BY-SA 4.0.
Veuillez ouvrir un problème si vous avez trouvé une erreur ou si vous avez une suggestion sur la façon d'améliorer la documentation.