
👮 👊 정규식 서비스 거부(ReDos) 스캐너

기여하기 전에 기여 지침을 읽어주세요.
실제 작동 중인 ReDoS 스캐닝 스크린샷.

Wikipedia와 OSWAP에 괜찮은 설명이 있습니다. 기본적으로 특정 정규식(RegEx)은 특정 입력에 대해 오랜 시간이 걸릴 수 있습니다. 실제 예시를 보여드립니다.
> console.time('benchmark');
/^(([a-z])+.)+[A-Z](https://github.com/jagracey/regex-dos/blob/HEAD/%5Ba-z%5D)+$/.test('aaaaaaaaaaaaaaa');
console.timeEnd('benchmark');
< benchmark: 0.060ms
> console.time('benchmark');
/^(([a-z])+.)+[A-Z](https://github.com/jagracey/regex-dos/blob/HEAD/%5Ba-z%5D)+$/.test('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
console.timeEnd('benchmark');
< benchmark: 308.656ms
> console.time('benchmark');
/^(([a-z])+.)+[A-Z](https://github.com/jagracey/regex-dos/blob/HEAD/%5Ba-z%5D)+$/.test('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
console.timeEnd('benchmark');
< benchmark: 3179.829ms
> console.time('benchmark');
/^(([a-z])+.)+[A-Z](https://github.com/jagracey/regex-dos/blob/HEAD/%5Ba-z%5D)+$/.test('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
console.timeEnd('benchmark');
< benchmark: 22159.769ms // 22 seconds
> // You can guess what would happen if you test the RegEx with 100 repeating characters.
console.time('benchmark');
/^(([a-z])+.)+[A-Z](https://github.com/jagracey/regex-dos/blob/HEAD/%5Ba-z%5D)+$/.test( 'a'.repeat(100) );
console.timeEnd('benchmark');
< benchmark: lol.....no.
평소와 같이 NPM으로 설치합니다.
npm install redos
CLI에서 redos를 실행할 수 있습니다:
# Use "Find" to run Regex-DoS for any set of JS files you want.
find . -name "*.js" -not -path "./node_modules/*" -exec redos {} \;
또는 node 모듈로 실행하려면:
var redos = require('redos');
// Using a Callback
redos(" 'aaaa'.split(/a+b?c*/g); ", function(regexNodes){
console.log( regexNodes.results() );
};
// Or Without a Callback
redos(" 'aaaa'.split(/a+b?c*/g); ").results();
// Or With Better Content to Parse
const fs = require('fs');
const content = fs.readFileSync('./foobar.js'); // <--- Your own file Here.
redos( content ).results();
곧 공개 예정?
기여 방법에 대한 자세한 내용은 기여 가이드를 참조하세요. 아마도 예상하시는 그대로일 것입니다.
자세한 내용은 행동 강령을 참조하세요. 기본적으로 요약하면 다음과 같습니다:
개방적이고 환영하는 환경을 조성하기 위해, 우리 기여자와 유지관리자는 연령, 체형, 장애, 민족, 성 정체성과 표현, 경험 수준, 국적, 외모, 인종, 종교, 또는 성적 정체성과 지향에 관계없이 누구에게나 괴롭힘 없는 경험을 우리 프로젝트와 커뮤니티에서 제공할 것을 서약합니다.
MIT 라이선스 (MIT)
Copyright (c) 2016 John Gracey
이 소프트웨어 및 관련 문서 파일(이하 "소프트웨어")의 사본을 얻은 모든 사람에게는 소프트웨어를 제한 없이 다룰 수 있는 권한이 무료로 부여됩니다. 여기에는 소프트웨어 사본을 사용, 복사, 수정, 병합, 게시, 배포, 재라이선스 및/또는 판매할 권리와, 소프트웨어를 제공받은 사람이 그렇게 할 수 있도록 허용할 권리가 포함되며, 단 아래의 조건에 따르는 경우에 한합니다.
위 저작권 고지 및 이 허가 고지는 소프트웨어의 모든 사본 또는 상당 부분에 포함되어야 합니다.
소프트웨어는 어떠한 종류의 명시적 또는 묵시적 보증 없이 "있는 그대로" 제공됩니다. 여기에는 상품성, 특정 목적에의 적합성 및 비침해성에 대한 보증이 포함되나 이에 국한되지 않습니다. 어떠한 경우에도 저자 또는 저작권 보유자는 계약, 불법 행위 또는 기타 행위에 관계없이, 소프트웨어 또는 소프트웨어의 사용이나 기타 거래로 인해 발생하거나 이와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다.