Статический анализатор для сканирования JavaScript и кода TypeScript для проблемных регулярных выражений.
Сканер доступен как изображение контейнера, которое вы можете запустить в любом проекте JavaScript или TypeScript. Например, чтобы сканировать текущий каталог:
docker run --rm -v $( pwd ) :/project docker.io/ericornelissen/js-re-scan:latestПримечание. Чтобы использовать Podman вместо Docker, вы можете заменить
dockerотpodmanв любой примере команды.
При необходимости вы можете игнорировать определенные файлы или каталоги, используя опцию --ignore-pattern . Например, чтобы игнорировать код поставщика, чтобы сосредоточиться на проблемах в вашем собственном проекте, который вы можете использовать:
docker run --rm -v $( pwd ) :/project docker.io/ericornelissen/js-re-scan:latest
--ignore-pattern vendor/Сканер имеет следующие коды выхода.
| Код выхода | Значение |
|---|---|
| 0 | Проблем не обнаружено |
| 1 | Файлы с проблемными регулярными выражениями найдены |
| 2 | Что -то пошло не так во время сканирования |
Если вы нашли этот сканер полезным, подумайте о том, чтобы использовать Eslint-Plugin-Regexp вместо этого. Этот плагин Eslint - это то, что поддерживает сканер, и он может лучше интегрироваться с существующими рабочими процессами вашего проекта.
Следуйте этим шагам, чтобы обновить настройку Eslint, чтобы охватить то, что делает этот сканер:
Установите плагин:
npm install --save-dev eslint-plugin-regexpОбновите свою конфигурацию Eslint:
Eslint V9 с плоской конфигурацией:
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 и более ранняя или Legacy Config:
# .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
} Если вы хотите, вы можете построить сканер с нуля. Из корня этого проекта запустите что -то вроде:
docker build --file Containerfile .Или используйте цель, сделайте цель:
make build ENGINE=dockerЭтот сканер стремится предоставить разработчикам инструмент для поиска уязвимого регулярного выражения в своем коде. Таким образом, цель состоит в том, чтобы сообщить только о настоящих положительных моментах . В результате все выводы актуальны, но чистый отчет не означает, что ваш проект не имеет уязвимых регулярных выражений.
Это контрастирует с такими инструментами, как Redos-Detector, которые найдут уязвимые регулярные выражения этого сканера, но также сообщают о ложных позитивах . Поскольку трудно определить, является ли конкретный отчет ложным положительным, другие инструменты трудно использовать.
Этот сканер запускает Eslint с плагином Eslint-Plugin-Regexp, чтобы найти и сообщать о регулярных выражениях, которые нарушают правила с последствиями безопасности.
Поддержка TypeScript предоставляется @TypeScript-eslint/Parser, поддержка Markdown предоставляется @Eslint/Markdown.
Этот проект лицензирован по лицензии Apache 2.0, см. Лицензию на полную лицензию. Текст документации лицензируется в соответствии с CC BY-SA 4.0.
Пожалуйста, откройте проблему, если вы нашли ошибку или если у вас есть предложение о том, как улучшить документацию.