문제가있는 정규식에 대한 JavaScript 및 TypeScript 코드를 스캔하는 정적 분석기.
스캐너는 JavaScript 또는 TypeScript 프로젝트에 대해 실행할 수있는 컨테이너 이미지로 제공됩니다. 예를 들어, 현재 디렉토리를 스캔하려면 다음과 같습니다.
docker run --rm -v $( pwd ) :/project docker.io/ericornelissen/js-re-scan:latest참고 : Docker 대신 Podman을 사용하려면 모든 예제 명령에서
dockerpodman으로 바꿀 수 있습니다.
필요한 경우 --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 지원은 @TypeScript-Eslint/Parser에서 제공하며 MarkDown 지원은 @eslint/Markdown에서 제공합니다.
이 프로젝트는 Apache 2.0 라이센스에 따라 라이센스가 부여됩니다. 전체 라이센스 텍스트에 대한 라이센스를 참조하십시오. 문서 텍스트는 CC By-SA 4.0에 따라 라이센스가 부여됩니다.
실수를 발견했거나 문서 개선 방법에 대한 제안이 있으면 문제를여십시오.