ericcornelissen/js-regex-security-scanner
GitHub: ericcornelissen/js-regex-security-scanner
一个静态分析器,专门用于扫描 JavaScript 和 TypeScript 代码中可能导致拒绝服务攻击的危险正则表达式。
Stars: 8 | Forks: 2
# JavaScript 正则表达式安全扫描器
一个静态分析器,用于扫描 JavaScript 和 TypeScript 代码中存在问题的正则表达式。
## 开始使用
该扫描器以容器镜像的形式提供,使用以下命令安装:
```
docker pull docker.io/ericornelissen/js-re-scan:latest
```
使用 cosign 验证容器来源(可选但推荐):
```
cosign verify \
--certificate-identity-regexp \
'https://github.com/ericcornelissen/js-regex-security-scanner/.+' \
--certificate-oidc-issuer \
'https://token.actions.githubusercontent.com' \
docker.io/ericornelissen/js-re-scan:latest
```
现在你可以使用它来扫描 JavaScript 或 TypeScript 项目。例如,扫描当前目录:
```
docker run --rm -v $(pwd):/project docker.io/ericornelissen/js-re-scan:latest
```
如果你想使用 [Podman] 而不是 [Docker],可以在任何示例命令中将 `docker` 替换为 `podman`。如果想使用 [GitHub Container Registry] 而不是 [Docker] Hub,可以使用 `ghcr.io/ericcornelissen/js-re-scan`。
### 忽略模式
如有必要,你可以使用 `--ignore-pattern` 选项忽略某些文件或目录。例如,忽略第三方代码以专注于你自己项目中的问题,可以使用:
```
docker run --rm -v $(pwd):/project docker.io/ericornelissen/js-re-scan:latest \
--ignore-pattern vendor/
```
### 退出代码
扫描器具有以下退出代码。
| 退出代码 | 含义 |
| -------: | :----------------------------------------------- |
| 0 | 未发现问题 |
| 1 | 发现包含有问题正则表达式的文件 |
| 2 | 扫描过程中出错 |
## 功能特性
- 检测指数级和多项式回溯的情况。
- 检测因正则表达式在输入字符串中移动而导致的超线性最坏运行时间。
- 基于标准文件和文件夹模式忽略生成的代码。
- 基于标准文件和文件夹模式忽略测试代码。
- 扫描文档。
## 成果
下表概述了借助此扫描器发现的 Bug 和安全公告(按时间从近到远排序)。如果你根据此扫描器的结果报告了 Bug 或公告,欢迎将其添加到列表中!
| 项目 | 修复 / 公告 |
| -------------------- | ---------------------------- |
| [decamelize] | [`e9e3041`] |
| [browserslist] | [`c331c95`] |
| [st] | [#103][st-103] |
| [@std/path] | [#6764][@std/path-6764] |
| [@eslint/markdown] | [#463][@eslint/markdown-463] |
| [@eslint/plugin-kit] | [GHSA-xffm-g5w8-qvg7] |
| [shescape] | [CVE-2022-36064] |
## 迁移到 ESLint
如果你觉得这个扫描器很有帮助,请考虑改用 [eslint-plugin-regexp]。这个 [ESLint] 插件是扫描器的核心动力来源,它可能更能与你项目现有的工作流集成。
按照以下步骤更新你的 ESLint 配置以覆盖此扫描器的功能:
1. 安装插件:
npm install --save-dev eslint-plugin-regexp
2. 更新你的 ESLint 配置:
import regexp from "eslint-plugin-regexp";
// ... 你正在使用的其他插件
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",
},
],
},
},
// ... 你其余的配置
];
## 从源代码构建
如果你愿意,可以从头构建扫描器。在项目根目录下运行类似以下的命令:
```
docker build --file Containerfile .
```
或者使用便捷的 [Make] 目标:
```
make build ENGINE=docker
```
## 理念
此扫描器旨在为开发者提供一种工具,用于查找代码中易受攻击的正则表达式。因此,目标是仅报告*真阳性*。
结果是所有发现都是相关的,但一份干净的报告并不意味着你的项目中没有易受攻击的正则表达式。
这与 [redos-detector] 等工具形成对比,后者会找到此扫描器无法找到的易受攻击正则表达式,但也会报告*假阳性*。由于很难确定特定报告是否为假阳性,其他工具往往难以使用。
## 幕后原理
此扫描器运行带有 [eslint-plugin-regexp] 插件的 [ESLint],以查找并报告违反具有安全含义规则的正则表达式。
TypeScript 支持由 [@typescript-eslint/parser] 提供,MarkDown 支持由 [@eslint/markdown] 提供。
## 许可证
本项目基于 Apache 2.0 许可证授权,有关完整的许可证文本,请参阅 [LICENSE]。文档文本基于 [CC BY-SA 4.0] 授权。
如果你发现了错误或对如何改进文档有建议,请[提交 issue]( )。
标签:DNS解析, Docker容器, JavaScript安全, MITM代理, ReDoS检测, SAST, TypeScript, 加密, 回溯复杂性, 安全专业人员, 安全插件, 开源项目, 攻击面发现, 数据可视化, 正则表达式安全, 漏洞扫描器, 盲注攻击, 网络安全, 脚本安全, 自定义脚本, 请求拦截, 错误基检测, 隐私保护, 静态代码分析