問題のある正規表現のためにJavaScriptとTypeScriptコードをスキャンする静的アナライザー。
スキャナーは、JavaScriptまたはTypeScriptプロジェクトに対して実行できるコンテナ画像として利用できます。たとえば、現在のディレクトリをスキャンするには:
docker run --rm -v $( pwd ) :/project docker.io/ericornelissen/js-re-scan:latest注: Dockerの代わりにPodmanを使用するには
podmandocker置き換えることができます。
必要に応じて、 --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-regexpESLINT構成を更新します:
フラット構成を備えた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-Eslint/Parserによって提供され、Markdownサポートは @eslint/Markdownによって提供されます。
このプロジェクトは、Apache 2.0ライセンスの下でライセンスされています。完全なライセンステキストについては、ライセンスを参照してください。ドキュメントテキストは、CC by-sa 4.0でライセンスされています。
間違いを見つけた場合、またはドキュメントを改善する方法について提案がある場合は、問題を開きます。