
👮 👊 ماسح حجب الخدمة عبر RegEx (ReDos)

يرجى قراءة إرشادات المساهمة قبل المساهمة.
لقطة شاشة لعملية فحص ReDoS أثناء التنفيذ.

ويكيبيديا و OWASP لديهما شروحات جيدة. أساسًا، يمكن لبعض التعبيرات النمطية أن تستغرق وقتًا طويلًا مع مدخلات معينة. إليك مثال واقعي.
> console.time('benchmark');
/^(([a-z])+.)+[A-Z](https://github.com/jagracey/regex-dos/blob/master/%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/master/%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/master/%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/master/%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/master/%5Ba-z%5D)+$/.test( 'a'.repeat(100) );
console.timeEnd('benchmark');
< benchmark: lol.....no.
كالعادة، ثبّت عبر NPM.
npm install redos
يمكنك تشغيل 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)
حقوق النشر (c) 2016 John Gracey
يُمنح هذا الإذن مجانًا لأي شخص يحصل على نسخة من هذا البرنامج وملفات التوثيق المرتبطة به ("البرنامج")، للتعامل مع البرنامج دون قيود، بما في ذلك على سبيل المثال لا الحصر حقوق الاستخدام، والنسخ، والتعديل، والدمج، والنشر، والتوزيع، والترخيص الفرعي، و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين يزودهم البرنامج بذلك، وفقًا للشروط التالية:
يجب تضمين إشعار حقوق النشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الجوهرية من البرنامج.
يُقدَّم البرنامج "كما هو"، دون أي ضمان من أي نوع، صريح أو ضمني، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق، والملاءمة لغرض معين وعدم الانتهاك. في أي حال من الأحوال لا يكون المؤلفون أو أصحاب حقوق النشر مسؤولين عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في دعوى تعاقدية أو تقصيرية أو غير ذلك، تنشأ عن أو فيما يتعلق بالبرنامج أو الاستخدام أو التعاملات الأخرى في البرنامج.