
👮 👊 RegEx Denial of Service (ReDos) Scanner

योगदान देने से पहले कृपया योगदान दिशानिर्देश पढ़ें।
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
आप redos को CLI पर चला सकते हैं:
# 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();
जल्द आ रहा है?
योगदान करने के तरीके की विस्तृत जानकारी के लिए योगदान गाइड देखें। यह संभवतः वही है जो आप अपेक्षा करते हैं।
विवरण के लिए आचार संहिता देखें। मूल रूप से यह इस प्रकार है:
एक खुले और स्वागत योग्य वातावरण को बढ़ावा देने के हित में, हम योगदानकर्ता और अनुरक्षक एक ऐसा अनुभव सुनिश्चित करने की प्रतिज्ञा करते हैं जो हमारे प्रोजेक्ट और हमारे समुदाय में भागीदारी को सभी के लिए उत्पीड़न-मुक्त बनाता है, चाहे उनकी आयु, शारीरिक आकार, विकलांगता, जातीयता, लिंग पहचान और अभिव्यक्ति, अनुभव का स्तर, राष्ट्रीयता, व्यक्तिगत उपस्थिति, नस्ल, धर्म, या यौन पहचान और अभिविन्यास कुछ भी हो।
The MIT License (MIT)
Copyright (c) 2016 John Gracey
यह अनुमति इसके द्वारा प्रदान की जाती है, निःशुल्क, किसी भी व्यक्ति को जो इस सॉफ्टवेयर और संबंधित दस्तावेज़ फ़ाइलों ("सॉफ्टवेयर") की एक प्रति प्राप्त करता है, बिना किसी प्रतिबंध के सॉफ्टवेयर में कार्य करने की अनुमति देता है, जिसमें बिना किसी सीमा के उपयोग, प्रतिलिपि, संशोधन, विलय, प्रकाशन, वितरण, उपलाइसेंस और/या सॉफ्टवेयर की प्रतियां बेचने के अधिकार शामिल हैं, और उन व्यक्तियों को अनुमति देने के लिए जिन्हें सॉफ्टवेयर प्रदान किया गया है, निम्नलिखित शर्तों के अधीन:
उपरोक्त कॉपीराइट सूचना और यह अनुमति सूचना सॉफ्टवेयर की सभी प्रतियों या महत्वपूर्ण भागों में शामिल की जाएगी।
सॉफ्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की वारंटी के, स्पष्ट या निहित, जिसमें बिना सीमा के व्यापारिकता, किसी विशेष उद्देश्य के लिए उपयुक्तता और उल्लंघन न होने की वारंटी शामिल हैं। किसी भी स्थिति में लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य दायित्व के लिए उत्तरदायी नहीं होंगे, चाहे वह अनुबंध, अपकृत्य या अन्यथा के कारण उत्पन्न हो, सॉफ्टवेयर के उपयोग या अन्य व्यवहार से या उसके संबंध में।