Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
url-regex-safe — مطابقة التعبيرات النمطية لعناوين URL. نسخة مُحدثة وآمنة ومتوافقة مع المتصفحات من url-regex. يعالج ثغرة CVE-2020-7661 لخوادم Node.js. | Kitploit
أدوات/GitHubGitHub/spamscanner/url-regex-safe
أدوات عامةالتحليل الثابتتحليل الثغرات الأمنيةالبرمجة النصية والأتمتةأمن الويب
GitHubspamscanner/url-regex-safe

url-regex-safe

مطابقة التعبيرات النمطية لعناوين URL. نسخة مُحدثة وآمنة ومتوافقة مع المتصفحات من url-regex. يعالج ثغرة CVE-2020-7661 لخوادم Node.js.

عرض المستودع
8116منذ 3 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
الموقع الإلكتروني

url-regex-safe

build status code style styled with prettier made with lass license npm downloads

تعبير نمطي لمطابقة عناوين URL. نسخة مُصانة وآمنة ومتوافقة مع المتصفحات من url-regex. تعمل على حل CVE-2020-7661 لخوادم Node.js. تعمل في Node v14+ والمتصفحات. مُصانة لصالح Spam Scanner وForward Email.

Table of Contents

  • مقدمة
  • التثبيت
  • الاستخدام
    • Node
    • المتصفح
  • الخيارات
  • نصائح سريعة والانتقال من url-regex
  • القيود
  • المساهمون
  • الترخيص

مقدمة

بعد اكتشاف CVE-2020-7661 والإفصاح عنه علنًا (من خلال عملي على Spam Scanner وForward Email) – استخدمت تنفيذًا من url-regex مع بعض الإضافات في الأعلى لتصفية مطابقات URL غير الصحيحة.

غير أنني بعد استخدامه على Forward Email في الإنتاج (الذي يعالج مئات الآلاف من رسائل البريد الإلكتروني أسبوعيًا)، وجدت ووثّقت العديد من المشاكل الأساسية الإضافية في url-regex.

وإدراكًا مني أن url-regex لم يعد يُصان بنشاط، وأن لديه 9 طلبات سحب مفتوحة حتى وقت كتابة هذا النص، كما أنه يفتقر إلى دعم المتصفحات – قررت كتابة هذه الحزمة للجميع ودمج جميع طلبات السحب المفتوحة.

من المؤمل أن تكون هذه الحزمة أقرب إلى الاستخدام العملي المقصود للتعبير النمطي لعناوين URL، وأن تسمح أيضًا للمستخدم بتهيئتها كما يشاء. يرجى الاطلاع على Forward Email إذا كانت هذه الحزمة قد ساعدتك، واستكشف الكود المصدري الخاص بنا على GitHub الذي يوضح كيفية استخدامنا لهذه الحزمة.

التثبيت

ملاحظة: السلوك الافتراضي لهذه الحزمة سيحاول تحميل re2 (وهو تبعية اختيارية نظيرة تُستخدم لمنع هجمات حجب الخدمة عبر التعبيرات النمطية وغير ذلك). إذا كنت ترغب في استخدام هذا السلوك، يجب أن يكون لديك re2 مثبتًا عبر npm install re2 – وإلا فستعود الحزمة إلى استخدام نسخ RegExp العادية. اعتبارًا من v4.0.0 أضفنا خيارًا إذا كنت ترغب في إجبار هذه الحزمة على عدم محاولة تحميل re2 حتى (على سبيل المثال، إذا كانت موجودة في node_modules ولكنك لا تريد استخدامها) – فقط مرر re2: false كخيار.

npm:

root@kitploit:~
npm install url-regex-safe

الاستخدام

Node

لقد قمنا بحل CVE-2020-7661 من خلال تضمين RE2 لاستخدام Node.js. لن تضطر بعد الآن إلى لف تعبيرات URL النمطية يدويًا باستخدام new RE2(urlRegex()) عبر url-regex-safe (نحن نفعل ذلك تلقائيًا نيابة عنك).

root@kitploit:~
const urlRegexSafe = require('url-regex-safe');

const str = 'some long string with url.com in it';
const matches = str.match(urlRegexSafe());

for (const match of matches) {
  console.log('match', match);
}

console.log(urlRegexSafe({ exact: true }).test('github.com'));

المتصفح

بما أن RE2 غير مصمم للمتصفح، فلن يتم استخدامه، وبالتالي يظل CVE-2020-7661 مشكلة في جانب العميل. ومع ذلك فهو ليس خطيرًا لأن أقصى ما قد يفعله هو تعطّل تبويب المتصفح (بينما في جانب Node.js كان سيعطّل العملية بالكامل ويُحدث استثناءً بسبب نفاد الذاكرة).

VanillaJS

هذا هو الحل المناسب لك إذا كنت تستخدم وسوم <script> في كل مكان!

root@kitploit:~
<script src="https://unpkg.com/url-regex-safe"></script>
<script type="text/javascript">
  (function() {
    var str = 'some long string with url.com in it';
    var matches = str.match(urlRegexSafe());

    for (var i=0; i<matches.length; i++) {
      console.log('match', matches[i]);
    }

    console.log(urlRegexSafe({ exact: true }).test('github.com'));
  })();
</script>

Bundler

بافتراض أنك تستخدم browserify أو webpack أو rollup أو أي أداة تجميع أخرى، يمكنك ببساطة اتباع استخدام Node أعلاه.

TypeScript

لاستخدام هذه الحزمة مع TypeScript، يمكنك تثبيت حزمة @types/url-regex-safe لتعريفات الأنواع.

root@kitploit:~
npm install --save-dev @types/url-regex-safe

الخيارات

نصائح سريعة والانتقال من url-regex

يجب عليك تجاوز الافتراضي وتعيين strict: true إذا كنت لا ترغب في مطابقة github.com بمفردها (على الرغم من أن www.github.com سيعمل إذا كان strict: false).

على عكس الحزمة url-regex المهجورة وغير المُصانة، نقوم ببعض الأشياء بشكل مختلف:

  • نقوم بتعيين strict إلى false افتراضيًا (url-regex كان يضبطه على true).
  • أضفنا خيار auth، المضبوط على false افتراضيًا (url-regex يطابق ضد المصادقة الأساسية؛ وكان يضبطه على true - لكن هذا سلوك مُهمَل في Chromium).
  • أضفنا خيارَي parens وipv6، المضبوطين على false وtrue افتراضيًا (url-regex كان يضبط parens على true بينما كان ipv6 غير موجود أو مضبوطًا على ).

القيود

ينطبق هذا القيد فقط إذا كنت تستخدم re2: نظرًا لعدم قدرتنا على استخدام وظيفة "النظرات الخلفية السلبية" (negative lookbehinds) في التعبيرات النمطية (بسبب قيود RE2)، لم نتمكن من دمج المنطق من طلب السحب هذا. كان هذا سيسمح لنا بجعل example.jpeg يُطابق فقط إذا كان example.jp، لكن إذا مررت example.jpeg الآن فسوف يستخرج example.jp منه (نظرًا لأن .jp نطاق أعلى مستوى TLD). قد يوجد حل بديل، ونرحب بمساهمات المجتمع بشأن هذه المسألة.

المساهمون

الاسمالموقع
Forward Email LLChttps://forwardemail.net
Kevin Mårtensson
Diego Perini

الترخيص

MIT © Forward Email LLC

تنزيل الأداة
PropertyTypeDefault ValueDescription
re2Booleantrueمحاولة تحميل re2 لاستخدامه بدلاً من RegExp لإنشاء نسخ جديدة من التعبيرات النمطية. إذا مررت re2: false، فلن يتم حتى محاولة تحميل re2.
exactBooleanfalseمطابقة سلسلة نصية محددة تمامًا فقط. مفيد مع regex.test(str) للتحقق مما إذا كانت السلسلة النصية عنوان URL. قمنا بتعيين هذا الخيار إلى false افتراضيًا لمطابقة قيم نصية مثل github.com (بدلاً من اشتراط وجود بروتوكول أو نطاق فرعي www). نعتقد أن هذا أقرب إلى الاستخدام العملي المقصود لهذه الحزمة.
strictBooleanfalseإجبار عناوين URL على البدء ببروتوكول صالح أو www إذا تم الضبط إلى true. إذا كان true، فسيسمح بأي نطاق أعلى مستوى (TLD) طالما أنه يتكون من حرفين صالحين على الأقل. إذا كان false، فسيطابق النطاق الأعلى مستوى (TLD) مع قائمة النطاقات الأعلى مستوى الصالحة باستخدام tlds.
authBooleanfalseالمطابقة مع ترويسات المصادقة الأساسية (Basic Authentication). قمنا بتعيين هذا الخيار إلى false افتراضيًا لأنه تم إهماله في Chromium، وإلا فإنه يترك المستخدم مع مطابقات URL غير مرغوب فيها (وهذا أقرب إلى الاستخدام العملي المقصود لهذه الحزمة من خلال تعيينه إلى false افتراضيًا أيضًا).
localhostBooleantrueيسمح بـ localhost في جزء اسم المضيف من عنوان URL. راجع test/test.js لمزيد من الإلمام باختبار localhost وكيف سيعيد قيمة قد تكون غير مرغوب فيها. ستُؤخذ طلبات السحب في الاعتبار لحل مشكلة "pic.jp" مقابل "pic.jpg".
parensBooleanfalseالمطابقة مع الأقواس اللاحقة بنمط Markdown. قمنا بتعيين هذا الخيار إلى false لأنه ينبغي أن يكون على المستخدم تحليل عناوين URL الخاصة بـ Markdown.
apostrophesBooleanfalseالمطابقة مع الفواصل العليا. قمنا بتعيين هذا الخيار إلى false لأننا لا نريد أن تؤدي السلسلة النصية background: url('http://example.com/pic.jpg'); إلى http://example.com/pic.jpg'. راجع هذه المشكلة لمزيد من المعلومات.
trailingPeriodBooleanfalseالمطابقة مع النقاط اللاحقة. قمنا بتعيين هذا الخيار إلى false افتراضيًا لأن السلوك العملي يريد أن تكون example.com هي المطابقة وليس example.com. (وهذا مختلف عن url-regex الذي يطابق النقطة اللاحقة في تلك الحزمة).
ipv4Booleantrueالمطابقة مع عناوين URL الخاصة بـ IPv4.
ipv6Booleantrueالمطابقة مع عناوين URL الخاصة بـ IPv6.
tldsArraytldsالمطابقة مع قائمة محددة من النطاقات الأعلى مستوى (TLDs)، أو القائمة الافتراضية المقدمة من tlds.
returnStringBooleanfalseإرجاع التعبير النمطي كسلسلة نصية بدلاً من RegExp (مفيد للمنطق المخصص، مثل ما فعلناه مع Spam Scanner).
false
  • أضفنا خيار apostrophe، المضبوط على false افتراضيًا (url-regex كان يضبطه على true).
  • أضفنا خيار trailingPeriod، المضبوط على false افتراضيًا (ما يعني أن المطابقات لن تحتوي على نقاط لاحقة، بينما كان url-regex يضبطه على true).