用于扫描JavaScript和打字稿代码的静态分析仪是否有问题的正则表达式。
扫描仪可作为容器图像可用,您可以与任何JavaScript或打字稿项目相对。例如,扫描当前目录:
docker run --rm -v $( pwd ) :/project docker.io/ericornelissen/js-re-scan:latest注意:要使用Podman而不是Docker,您可以在任何示例命令中替换
podman的docker。
如有必要,您可以使用选项--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及更早或旧版配置:
# .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-Plugin-Regexp插件运行ESLINT,以查找并报告具有安全含义的规则的正则表达式。
TypeScript支持由 @typescript-eslint/Parser提供,Markdown支持由 @Eslint/Markdown提供。
该项目是根据Apache 2.0许可证获得许可的,请参阅《完整许可文本》许可。文档文本根据CC BY-SA 4.0许可。
如果您发现错误或对如何改进文档有建议,请打开问题。