

コントリビュートする前にコントリビューションガイドラインをお読みください。
ReDoSスキャンを実行中のスクリーンショット。

Wikipedia と OSWAP には適切な説明があります。基本的に、特定の正規表現は特定の入力に対し非常に長い時間がかかることがあります。実際の例を次に示します。
> 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
以下に定める条件に従い、本ソフトウェアおよび関連する文書ファイル(以下「ソフトウェア」)の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。これには、ソフトウェアの複製、変更、結合、公開、配布、サブライセンス、および/または販売の権利、およびソフトウェアを提供する相手にこれを許可する権利が含まれますが、これらに限定されません。
上記の著作権表示およびこの許可表示は、ソフトウェアのすべての複製または重要な部分に含まれるものとします。
ソフトウェアは「現状のまま」で提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害についての保証を含む、いかなる保証もありません。いかなる場合も、著作者または著作権保持者は、契約行為、不法行為、その他の行為であるかを問わず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因または関連して生じたいかなる請求、損害、その他の責任についても責任を負いません。