مُبهِّم JavaScript

يرفع الإبهام كلفة قراءة مصدر JavaScript الخاص بك، ليس مطلقا (لا إبهام واجهة أمامية مضاد للرصاص) لكن بما يكفي لتثبيط الفحص العابر وإبطاء الكشط الآلي. تطبّق هذه الأداة ترميز مصفوفة السلاسل، وتشويه المعرّفات، وتسطيح تدفق التحكم، وحقن الكود الميت اختياريا، مع إمكانية اختيار كل خيار حسب مدى العدوانية التي تريدها.

كيفية إبهام JavaScript

  1. 1

    الصق المصدر

    أي JS صالح. إن كان يعتمد على أسماء خصائص عامة محددة من صفحة مضيفة، اضبطها كمحجوزة.

  2. 2

    اختر التقنيات

    ترميز السلاسل (hex / base64)، تشويه المعرّفات، تسطيح تدفق التحكم، حقن الكود الميت، غلاف ذاتي الدفاع.

  3. 3

    اختر ملف الهدف

    متصفح (آمن لـ ES5، دون واجهات Node)، أو Node.js (يسمح بـ `require` و`Buffer`)، أو منخفض (تصغير غالبا).

  4. 4

    أبهِم

    تُخرج الأداة الكود المحوّل مع فارق في الحجم. قد تجعل الإعدادات العدوانية المخرَج أكبر بـ 3-5 مرات من المصدر.

التقنيات وما تكلّفك

التقنية ترفع جهد المهاجم كلفة وقت التشغيل كلفة الحجم
إعادة تسمية المتغيرات منخفضة لا تُذكر أصغر (أثر جانبي للتصغير)
ترميز مصفوفة السلاسل متوسطة ضئيلة (بحث واحد لكل سلسلة) ‎+10-30%
تسطيح تدفق التحكم عالية قابلة للقياس (نحو 2-5%) ‎+50-150%
حقن الكود الميت منخفضة (مسرح أمان) صغيرة ‎+20-50%
غلاف ذاتي الدفاع متوسطة فحص لمرة واحدة ‎+5-10%
حماية التنقيح متوسطة (يكشف أدوات المطور) فحص لمرة واحدة ‎+5%
VM / المحاكاة الافتراضية (مدفوع) عالية جدا كبيرة (5-20x) ‎+300-500%

ما لا يستطيع الإبهام حمايته

  • الأسرار. أي ثابت في مصدر واجهتك الأمامية قابل للقراءة بإعطائه وقتا كافيا. مفاتيح واجهة البرمجة، أسرار المصادقة، منطق التسعير، لا تعتمد أبدا على الإبهام لإخفائها. انقلها إلى الخادم.
  • الخوارزميات ذات المخرَج القابل للملاحظة. إن استطاع المتصفح تشغيلها، فمهاجم بمنقّح يستطيع ملاحظة كل مُدخل ومخرَج. الإبهام يبطئ ذلك؛ لا يوقفه.
  • الكشط الآلي على نطاق واسع. يعتمد منع الكشط على الكشف السلوكي (البصمات، حدود المعدل، CAPTCHA)، لا على إبهام المصدر.

متى يستحق الإبهام العناء

  • مقاومة العبث على حزم SDK المضمنة (الترخيص، حزم SDK للإعلانات، عملاء الألعاب).
  • رفع الكلفة للنسخ واللصق منخفض الجهد لتنفيذ منافس.
  • جعل تصنيف السكربتات الآلي أصعب للكاشطات واسعة الطيف.

متى يكون عكسي المفعول

  • لديك مجمّع حزم أصلا. Webpack + Terser في وضع الإنتاج يصغّر ويشوّه المحليات أصلا. إضافة تمريرة إبهام ثانية تجلب لك القليل وتضخّم حجم الحزمة.
  • تحسّن للرسم الأول / Core Web Vitals. يضاعف الإبهام العدواني الحزمة ثلاثا؛ ما يضر بـ FCP وLCP.
  • عليك تنقيح الإنتاج. الإبهام الثقيل يجعل تتبعات مكدس Sentry عديمة الفائدة تقريبا دون خريطة مصدر مطابقة، وشحن خريطة المصدر يهزم الإبهام.

أخطاء شائعة

  • معاملة الإبهام كمكافئ للتشفير. ليس كذلك، إنه مطب سرعة.
  • شحن خريطة المصدر مع الحزمة المبهَّمة إلى الإنتاج. ذلك يبطل الإبهام تماما.
  • إبهام مكتبات طرف ثالث حمّلتها أصلا من CDN. تحصل على عقوبة الحجم دون أي مكسب.

الأسئلة الشائعة

لا. الإبهام مطب سرعة، لا قفل. محلل مصمم بمنقّح سيستعيد المنطق. يرفع الكلفة بما يكفي لردع الفحص العابر ومعظم الكاشطات الآلية، لكنه ليس أمانا.

إن وصلت إلى الخصائص ديناميكيا (obj["field_name"]، Object.keys(obj)) أو اعتمدت على أسماء دوال/أصناف محددة للصفحة المضيفة، أضفها إلى القائمة المحجوزة. دون ذلك، قد تكسر إعادة تسمية الخصائص التكاملات الخارجية.

احتفظ بالمصدر الأصلي. المُبهِّم تحويل أحادي الاتجاه؛ لا يمكنك استعادة الأصل تماما من المخرَج المبهَّم، بل تقريبا قابلا للقراءة فقط.

الإبهام الخفيف يضيف نحو 10-30%. تسطيح تدفق التحكم مع مصفوفات السلاسل يضيف 50-150%. أثقل الإعدادات قد تضاعف الحجم ثلاثا. تحقق من عدّاد حجم المخرَج قبل الشحن.

أدوات ذات صلة

الأداة متاحة بلغات أخرى