اختبار أمن واجهات البرمجة: مصفوفة التغطية وBOLA والأرقام الحقيقية
أمن الواجهات

اختبار أمن واجهات البرمجة: مصفوفة التغطية وBOLA والأرقام الحقيقية

اختبار أمن واجهات البرمجة بلا جرد وبلا رقم تغطية هو فحص لا اختبار. أربعة جرد، وحساب مصفوفة التفويض، وتسريب 403/404، وادعاءات الرمز، وحساب فضاء الرموز، وGraphQL، وحالات التسابق، والحد القانوني.

فريق الأمن الرقمي
17 دقيقة قراءة
المواضيع
اختبار اختراق الواجهات
OWASP API Top 10
BOLA
اختبار التفويض
أمن GraphQL

اختبار أمن واجهات البرمجة ليس فحصاً آلياً بقائمة كلمات أطول. هو مجموعة ادعاءات عن مَن يحق له فعل ماذا على أي كائن، تُنفَّذ على جرد يمكن عدّه. والعيوب التي تُنتج حوادث الواجهات نادراً ما تكون غريبة: نقطة نهاية تستقبل معرّف كائن وتعيد الكائن دون التحقق من ملكيته، ورمز لم يُتحقق من توقيعه أو من جمهوره، ونقطة قائمة تعيد صفوف كل المستأجرين، ورمز لمرة واحدة من ستة أرقام بلا حد لكل حساب، وتغيير حالة بلا حدود معاملة. كل ذلك قابل للاختبار بحسابين وسكربت. وما ينقص معظم الارتباطات ليس الأدوات بل الحساب: كم ادعاء نُفِّذ، على كم نقطة نهاية، وبكم هوية، وماذا كان الجرد يحتوي فعلاً قبل بدء الاختبار.

الاختبار جيد بقدر الجرد الذي يقف خلفه

ابدأ بالرقم الذي لا يملكه أحد. دراسة أثر أمن الواجهات لعام 2026 من Akamai، التي شملت 1,840 من قادة الأمن والممارسين في عشرة بلدان، وجدت أن 87 في المئة من المشاركين تعرّضوا لحادث أمني واحد على الأقل مرتبط بواجهة برمجة خلال الاثني عشر شهراً الماضية، مقابل 76 في المئة في 2022. ووجدت الدراسة نفسها أن 77 في المئة يقولون إن لديهم جرداً كاملاً للواجهات، لكن 23 في المئة فقط من هؤلاء يعرفون أي الواجهات تعيد بيانات حساسة - وهي نسبة تنخفض لا ترتفع. وتشير دراسات الاكتشاف إلى الاتجاه ذاته: كشف الارتباط الذي أجرته Cloudflare بتعلّم الآلة عن نحو 31 في المئة من نقاط النهاية أكثر مما فهرسته المؤسسات بنفسها.

هذه الفجوة هي أول نتيجة في أي اختبار واجهات، وهي قابلة للقياس قبل إرسال طلب واحد. وإذا اختبرت ما يذكره مستند OpenAPI فقط، فأنت تختبر الجزء من السطح الذي تذكّر أحدهم توثيقه، وهو عادةً الجزء الذي بُني بعناية أكبر.

عروض المراقبة عن بعد

عروض المراقبة عن بعد

ابدأ بـ Sphnix ثم قارن mSpy و Eyezy.

أربعة جرد، أربع حقائق مختلفة

  • المواصفة. OpenAPI أو protobuf أو مخطط GraphQL. تكشف نقاط النهاية الموثقة ومخططات الأمان المعلنة، وتفوّت كل ما نُشر دون تحديث المستند.
  • الحركة المرصودة. ثلاثون يوماً من سجلات البوابة أو الحافة، مجمّعة بحسب الطريقة وقالب المسار. تكشف نقاط النهاية الظل التي تناديها العملاء الحقيقية، وإصدارات الجوال التي لم تُسحب.
  • ملفات العميل. السلاسل النصية وجداول المسارات داخل حزم التطبيقات والجافاسكربت. تكشف النقاط التي يناديها التطبيق وحده: مسارات الإدارة الداخلية، والإصدارات القديمة، ومسارات التصحيح المتروكة.
  • أسماء النطاقات والنشرات. سجلات شفافية الشهادات وسجلات DNS وكل بيئة معاينة أو تجهيز أنشأها نظام التكامل المستمر. تكشف البيئة التي تحمل بيانات الإنتاج وبلا حد للمعدل.

الصفوف الغائبة دائماً تقريباً

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

وحّد القوائم الأربع في جدول واحد بصف لكل نقطة وطريقة: المسار، ومخطط المصادقة، وهل يظهر معرّف كائن في المسار أو الاستعلام أو الجسم، وتصنيف البيانات التي تعيدها، وهل هي متاحة للعامة، والفريق المالك. هذا الجدول هو ما يُقاس عليه الاختبار، وهو الجواب الصادق الوحيد على سؤال العميل لاحقاً: هل اختُبرت واجهتي أم اختُبرت عيّنة منها؟

النتيجة المهمة في التفويض، ولا ماسح يجدها

التفويض المعطوب على مستوى الكائن (BOLA) يتصدّر قائمة OWASP لعشر مخاطر واجهات البرمجة منذ إنشائها، ولسبب بنيوي: الواجهة تتحقق من مَن أنت ثم تُسقط التحقق من أن هذا الكائن يخصك. ولا يمكن للماسح أن يجدها، لأن العثور عليها يحتاج هويتين صالحتين ومعرّف كائن صالح لكل منهما. الماسح يتلقى 401 أو 403 فيمضي، أما النقطة المصابة فلا تعيد 200 إلا حين يطلب مستخدم حقيقي كائناً حقيقياً ليس له.

الاختبار نفسه قديم وممل، وينجح. أنشئ حسابين بالدور ذاته. أنشئ كائناً بحساب A وسجّل معرّفه من الاستجابة. اطلب المعرّف نفسه بحساب B. الواجهة السليمة تعيد 403، أو 404 إن أرادت عدم كشف الوجود. والمصابة تعيد 200 مع بيانات A. وما تبقى من هذا القسم هو الاختبار نفسه، مكرراً في المواضع التي ينسى فيها الناس تكراره.

خمسة أشكال للعيب نفسه

  • القراءة. يطلب B كائن A عبر المسار والاستعلام والجسم والترويسة - المواضع الأربعة، لأن المعالجات لا تتفق على أيّها تخضع للتفويض.
  • الكتابة. يرسل B طلب تعديل أو إحلال على كائن A. المعالج الذي يتحقق من الملكية في القراءة وينساها في التحديث شائع بما يكفي لاختباره مستقلاً.
  • الحذف. على الكائنات المُهيّأة للاختبار فقط. هذا هو الشكل الذي يحوّل اختباراً إلى حادث عند تنفيذه بلا حذر.
  • التداخل. يطلب B الكائن الابن عبر مسار يفترض الملكية من الأعلى: الفاتورة تحت الطلب، والمرفق تحت الفاتورة، والتعليق تحت المنشور. كل قفزة فرصة للتحقق من الأعلى ونسيان الطرف.
  • المجموعة. ينادي B نقطة القائمة بمعرّف A كمرشّح، أو بلا مرشّح في نظام متعدد المستأجرين. معالج الكائن الواحد سليم عادةً، ومعالج القائمة ليس كذلك في كثير من الأحيان، وهو الذي يسرب على نطاق واسع.

في منتج متعدد المستأجرين يجب أن يأتي معرّف المستأجر من الرمز المتحقق منه، لا من الطلب أبداً. والاختبار الذي يبدّل معرّفات الكائنات داخل مستأجر واحد سينجح بينما تبقى القراءة بين المستأجرين مفتوحة؛ لذلك يجب أن يكون الحسابان في مستأجرين مختلفين لا في مستخدمين مختلفين فقط. والمصيدة المجاورة هي شكل المعرّف: المعرّفات العشوائية تُبطئ التعداد ولا تُغني عن التحقق، لأن أي معرّف يُكشف عبر نقطة أخرى أو تصدير أو بريد أو سجل يمكن إعادة استخدامه.

وكيف يبدو الإصلاح يهم التقرير. التحقق الموضوع في طبقة مشتركة واحدة تمر بها كل المعالجات يغلق فئة من العيوب. والتحقق المضاف إلى المعالج الذي فشل يغلق نقطة واحدة ويترك الإصدار القادم ليكتشف النمط من جديد. اكتب أيّهما توصي به؛ هذا الفرق هو سبب تكرار النتيجة في اختبار العام القادم.

مصفوفة التغطية: تحويل «اختبر كل نقطة» إلى رقم

كل قائمة تحقق تقول الشيء ذاته وتتوقف: اختبر كل نقطة نهاية تتعامل مع كائنات بحسابين. لا أحد يحوّل هذه الجملة إلى عمل، ولهذا يمكن أن يختلف ارتباطان على الواجهة نفسها بعشرة أضعاف فيما نُفِّذ فعلاً. احسب بدلاً من ذلك.

عُدّ نقاط النهاية التي تستقبل مرجع كائن - في المسار أو الاستعلام أو الجسم أو الترويسة - وسمِّ ذلك E. وعُدّ الهويات التي يمكنك الاختبار بها: مستخدمان في مستأجرين مختلفين، ومستخدم بدور ثانٍ، ومسؤول، وطالب بلا مصادقة. وسمِّ ذلك R. سطح التفويض هو E مضروباً في R، وكل خلية طلبان: كائن الطالب نفسه يجب أن ينجح، ومعرّف كائن غريب يجب أن يفشل. واجهة من 120 نقطة، منها 70 تستقبل معرّف كائن، تُختبر بأربع هويات = 280 ادعاءً و560 طلباً.

مثال: 120 نقطة و4 هويات

  • 70 من 120 نقطة تستقبل معرّف كائن: E = 70.
  • الهويات: المستخدم A، والمستخدم B في مستأجر آخر، ومسؤول، وطالب بلا مصادقة: R = 4.
  • الادعاءات = 70 × 4 = 280. الطلبات = طلبان لكل ادعاء = 560.
  • زمن تنفيذ السكربت بمعدل طلبين في الثانية لكل هوية: أقل من خمس دقائق. الجهد البشري في تهيئة بيانات الاختبار لكل دور، لا في إرسال الطلبات.
  • وإذا قال التقرير «رُوجعت نقاط الإدارة يدوياً»، فذلك الصف خارج المصفوفة، وعلى رقم التغطية أن يقول ذلك.

هذا الرقم يخدم ثلاثة أغراض. يُقدّر الحجم وبالتالي السعر، ويعطي العميل مقاماً يقارن به عرض مورّد آخر، ويعطي إعادة الاختبار خط أساس: السكربت نفسه في المرة القادمة يُنتج 280 صفاً إما ناجحاً أو فاشلاً. ومن لا يستطيع ذكر مقام فاطلب منه السكربت، فالسكربت هو التغطية.

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

قرار 403 أم 404 يسرب أكثر مما يحمي

يعامل معظم الإرشاد الاختيار بين 403 و404 للكائن الغريب كمسألة ذوق. وهو قرار منتج له نتيجة قابلة للقياس، واختباره رخيص: خذ معرّف كائن موجود يخص A، ومعرّف كائن غير موجود إطلاقاً، واطلبهما بحساب B. قارن رمز الحالة وجسم الاستجابة ونص الخطأ والترويسات والتوقيت.

إذا أعاد الموجود 403 والمفقود 404، فقد أكدت الواجهة الوجود لطالب غير مصرّح له. ومع المعرّفات المتسلسلة يحوّل ذلك تحققاً فاشلاً إلى مصدر تعداد: يعرف المهاجم حجم فضاء الكائنات ومعدل نموّه وأي المعرّفات حيّة، دون أن يكون مصرّحاً لواحد منها. وإذا كان التبرير أن 403 تجربة أفضل لمستخدم شرعي أضاف كائنه إلى المفضلة من حساب آخر، فالحل أن يُتخذ القرار لكل مسار ويُوثَّق، لا أن يكون لكل معالج ومتناقضاً.

ما يتحقق منه الاختبار

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

لماذا يستحق نتيجة مستقلة

  • يبقى حياً بعد إصلاحات التفويض التي تعيد 403 في كل مكان، فلا يُغلق إلا بعد تسميته.
  • يحوّل تعرّضاً للقراءة فقط إلى قدرة على رسم الخريطة، ورسم الخريطة أول مرحلة في سلسلة هجوم.
  • سطر واحد في معالج أخطاء الإطار بعد اتخاذ القرار، ما يجعله نتيجة رخيصة الإغلاق على نحو غير معتاد.

اختبارات الرمز التي لا تحتاج حمولة

تُنتج طبقة المصادقة النصيب الثاني من حوادث الواجهات، وعيوبها قابلة للاختبار بمحرر نصوص وأداة إعادة إرسال. وقد نسبت تحليلات Wallarm لعام 2026 لحوادث الواجهات المعلنة 52 في المئة إلى مصادقة معطوبة و27 في المئة إلى استهلاك غير آمن لواجهات أطراف ثالثة، ولاحظت أن أغلب ثغرات الواجهات التي فهرستها يمكن الوصول إليها بلا مصادقة أصلاً. اقرأ هذه النسب كوصف لمكان تكتّل العيوب لا كقانون طبيعة؛ والمفيد هو القائمة التالية.

تسعة ادعاءات على مسار الرمز

  1. تثبيت الخوارزمية. الرمز الذي خوارزميته none، أو المُوقَّع من جديد بـ HMAC باستخدام المفتاح العام للخدمة نفسها كسر، يجب أن يُرفض. كلاهما هجوم قديم وما زال ينجح على المتحققات المكتوبة يدوياً.
  2. التحقق الفعلي من التوقيع. غيّر حرفاً واحداً في التوقيع وانتظر 401. المتحقق الذي يقرأ المطالبات ويتخطى فحص التوقيع أكثر شيوعاً مما توحي به الأدبيات.
  3. تثبيت مصدر المفتاح. لا يجوز أن تجعل حقول معرّف المفتاح وعنوان JWKS وعنوان الشهادة الخدمةَ تجلب مفتاحاً من مكان يتحكم به الطالب.
  4. تطبيق الانتهاء على الخادم. الرمز المنتهي يجب أن يفشل، ويجب أن تكون مهلة انحراف الساعة صغيرة بما يكفي لذكرها في التقرير. مهلة 24 ساعة نتيجة بحد ذاتها.
  5. التحقق من الجمهور والمُصدِر. لا يجوز أن يقبل خدمةً أخرى رمزاً صدر لخدمة واحدة. هذا العيب هو الذي يحوّل أضعف خدمة في المنظومة إلى مفتاح للبقية.
  6. فرض نوع الرمز. رمز الهوية أو رمز التجديد المُعاد استخدامه كرمز وصول يجب أن يفشل.
  7. قياس نافذة الإبطال. سجّل خروج الحساب ثم أعد إرسال رمز الوصول. أنظمة كثيرة لا تستطيع إبطاله طوال عمره؛ وهذا خيار تصميمي، وعلى التقرير ذكره بالدقائق لا كنجاح أو فشل.
  8. تدوير رمز التجديد. إعادة استخدام رمز تجديد مستهلك يجب أن تُبطل العائلة كلها، وإلا نجا الرمز المسروق من تغيير الضحية كلمة مرورها.
  9. النقل. الرموز في سلاسل الاستعلام تنتهي في سجلات الوصول وترويسات الإحالة وتاريخ المتصفح وذاكرة الوسيط. راجع السجلات قبل أن تفترض العكس.

وتستحق مفاتيح الواجهة أسئلتها الأربعة، لأنها أكثر ما يُصدر وأقل ما يُحكم: ما النطاق الذي يحمله المفتاح، ومتى ينتهي، ومن يستطيع تدويره، وأين يُخزَّن في العميل؟ المفتاح المضمّن في تطبيق جوال مفتاح عام مهما سمّاه المستند. والمفتاح بلا انتهاء وبلا حد معدل خاص به بيانات اعتماد دائمة وغير مقيسة، وعلى التقرير أن يصفه كذلك.

الإسناد الجماعي: الحقل الذي لم تقصد قبوله

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

ثلاث فئات طلب لكل نقطة كتابة

  • حقل غير معروف. حقل غير موجود في المخطط. استجابة 200 تعني أن المعالج يتجاهل المفاتيح المجهولة، وهذا جيد؛ واستجابة 500 تعني أن طبقة الربط بلا حماية.
  • حقل معروف لكنه ليس لك. حقل موجود ولا يجوز لدورك ضبطه: الدور، ومعرّف المستأجر، وعلامة التحقق، ورصيد الرصيد، والسعر، وحالة الموافقة، والطوابع الزمنية. استجابة 200 وقد طُبِّقت القيمة هي النتيجة، وهي أنفع من أثر مكدس.
  • إفراط في بيانات الاستجابة. العيب نفسه في الاتجاه المعاكس. قارن مفاتيح الاستجابة بما يستخدمه العميل فعلاً؛ كائن مستخدم يعيد تجزئة كلمة مرور أو ملاحظة داخلية أو علامة حذف ناعم أو اسم مستأجر آخر هو تعرّض للبيانات حتى إن لم تعرضه الواجهة.

الإصلاح المستدام قائمتا سماح لكل نقطة - حقول قابلة للكتابة بحسب الدور، وحقول قابلة للقراءة بحسب الدور - تُحفظ بجانب تعريف المسار لا تُشتق من النموذج. فخرائط «القابل للتعبئة» على مستوى الإطار تنزلق بمجرد أن يضيف أحدهم عموداً، وهذا الانزلاق غير مرئي حتى يعُدّه اختبار.

منطق العمل: اختبر الحساب لا الحمولة

الاختبار القائم على قوائم التحقق ذو شكل تعدادي: يبحث عن معرّفات لتبديلها ومعاملات لتشويشها. أما العيوب التي تكلف مالاً فذات شكل حسابي، وتحتاج من المختبر أن يعرف ما يجب أن يبقى صحيحاً. اكتب الثوابت أولاً، ثم يصبح كل منها اختباراً.

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

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

وتنتمي إعادة الإنتاج إلى هنا أيضاً. أرسل طلب الدفع أو الاستخدام نفسه مرتين بمفتاح التكرار نفسه وانتظر أثراً واحداً؛ وأرسله مرتين بلا مفتاح فيجب أن ترفض الواجهة التكرار بدل تنفيذه. العميل الذي يعيد المحاولة عند انتهاء المهلة سلوك طبيعي، والواجهة بلا مفاتيح تكرار تحوّل السلوك الطبيعي إلى خصم مزدوج.

حدود المعدل وحساب فضاء المفاتيح

جملة «طبّق حداً للمعدل» أقل الجمل قابلية للتنفيذ في معظم إرشاد الواجهات. الحدود تقيّد شيئين مختلفين - أسراراً قابلة للتخمين وعملاً مكلفاً - والنقاط التي تحتاجها ليست واحدة. احسب الأول بدل الجدال في أرقام الطلبات في الثانية.

ماذا يمنح فضاء المفاتيح للمهاجم

  • رمز لمرة واحدة من ستة أرقام = 1,000,000 احتمال. بعشرة محاولات في الثانية بلا قفل، يستغرق الاستنفاد المتوقع نحو 27.8 ساعة؛ وبألف محاولة في الثانية نحو 17 دقيقة.
  • رقم سري من أربعة أرقام = 10,000 احتمال: نحو 17 دقيقة بعشرة محاولات في الثانية، وثوانٍ بمعدل أعلى.
  • رمز إعادة تعيين كلمة المرور المبني من ستة أحرف بأبجدية صغيرة في الصنف نفسه، والصلاحية 15 دقيقة لا تنفع إلا إذا وُجد حد للمحاولات.
  • الخلاصة بنيوية: في نقاط بيانات الاعتماد يجب أن يكون الحد لكل حساب وأن يعدّ المحاولات الفاشلة، مع قفل أو تراجع بعد عدد صغير. والحد لكل عنوان IP وحده لا يقيّد الهجوم على حساب واحد.

ويفشل المفتاح على أساس IP لسبب لا علاقة له بالمهاجمين. مشغّلو الجوال يضعون آلاف المشتركين خلف عنوان NAT واحد على مستوى الشبكة، والشبكات المؤسسية تفعل ذلك عبر وسيط. فالحد الذي يقيّد الهجوم يحجب أيضاً نسبة معتبرة من المستخدمين الشرعيين في الذروة، فيرفعه الفريق حتى لا يقيّد شيئاً. المفاتيح الناجحة هي الهوية في الرمز، والحساب محل الإجراء، ومفتاح الواجهة؛ أما IP فإشارة مكمّلة للنقاط بلا مصادقة لا ضابط أساسي.

اختبر خمسة أشياء في كل نقطة اعتماد وكل نقطة مكلفة. أن حداً موجود للهوية. وأن حداً ثانياً أشد موجود للحساب في الدخول والرمز لمرة واحدة وإعادة تعيين كلمة المرور وقبول الدعوة. وأن الحد يعدّ الفشل لا النجاح. وأن تجاوزه يعيد 429 مع تلميح إعادة المحاولة، لا 500 يضاعفها. وأن النقاط المكلفة - البحث وتوليد التقارير وتحويل الصور والتصدير الجماعي - مقيّدة بالكلفة لا بعدد الطلبات، لأن طلباً واحداً على تصدير من 400 عمود لا يقارن بعملية بحث.

GraphQL والويب هوك ورفع الملفات: الأسطح التي تنساها القوائم

يغيّر GraphQL شكل الاختبار لا منطقه. عادةً يُعطَّل الاستبطان في الإنتاج، وهذا لا يوقف أحداً: اقتراحات الحقول في رسائل الخطأ («هل تقصد») تعدّد المخطط تخميناً تلو الآخر، وحزمة العميل تحتوي عادةً العمليات التي يستخدمها المنتج فعلاً. والاختبار هو اختبار التفويض نفسه، لكن في الطبقة الخطأ إن لم تنتبه - فحص مستوى الكائن يجب أن يكون في المُحلِّل أو طبقة البيانات، لأن حقلاً أعلى يتحقق من عضوية المستأجر لا يحمي التحديد المتداخل تحته.

والدفع الجماعي (batching) هو كيف يتجاوز GraphQL حدود المعدل، ويستحق التسمية. طلب HTTP واحد يمكن أن يحمل مئات العمليات المستعارة، كل منها تنفيذ منفصل للمُحلِّل. الحد الذي يعدّ طلبات HTTP يرى واحداً؛ وقاعدة البيانات ترى خمسمئة. والاختبار طلب يحمل مئات محاولات الدخول أو عمليات البحث المستعارة، والنتيجة إما استجابة حد واحد أو حزمة إجابات. والعلاج حدود كلفة محسوبة من الاستعلام المُحلَّل، أو استعلامات ثابتة أو قائمة سماح بالعمليات، وعمق أقصى للاستعلام - لا عدّاد طلبات أمام النقطة.

مستقبِلات الويب هوك

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

رفع الملفات

  • نوع المحتوى من بصمة الملف لا من الترويسة التي أرسلها العميل.
  • أين يستقر الملف: حاوية عامة بأسماء قابلة للتخمين تعرّض للبيانات حتى لو كانت النقطة مصرّحاً بها.
  • معالجة الاسم: تسلسلات اجتياز المسار، وأسماء الملفات التي تصبح مفاتيح كائنات.
  • هل يُقدَّم ملف SVG أو HTML مرفوع من أصل التطبيق نفسه، وهذا يحوّل الرفع إلى تنفيذ برمجة نصية مخزّن.

حالات التسابق واختبار الطلبين

تسلسل «تحقق ثم نفّذ» صحيح بالتتابع وخاطئ بالتوازي، ولهذا ينجو من مراجعة الشيفرة والاختبارات الوحدوية والمراجعة الأمنية التي تقرأ المعالج من أعلاه إلى أسفله. الاختبار طلبان متطابقان يُرسلان في اللحظة نفسها إلى نقطة تغيّر الحالة: استخدام بطاقة هدية، سحب رصيد، حجز المقعد الأخير، إغلاق موعد تسليم لمرة واحدة. يجب أن ينجح طلب ويُرفض الآخر؛ ونجاح الاثنين يعني أن الرصيد صُرف مرتين.

وسبب انتماء هذا إلى اختبار الواجهة لا إلى مراجعة الشيفرة أن العيب لا يظهر في أي معالج منفرد: الغائب هو حد معاملة أو قيد فريد. والحل هو نفسه - قيد في قاعدة البيانات أو تحديث شرطي لا يستطيع الطلب الثاني تحقيقه، مع مفتاح تكرار في الطلب - لا قفل على مستوى التطبيق، لأن القفل يعمل على نسخة واحدة ويفشل على الثانية. وحين يسأل العميل لماذا لا يكفي قفل داخل العملية، فالجواب مخطط النشر.

تنفيذ اختبارات مدمِّرة دون إتلاف الإنتاج

تُرتَّب معظم اختبارات الواجهات حسب القائمة لا حسب الخطر على النظام المُختبَر، ولهذا يقع اختبار حذف على سجل عميل حقيقي في الرابعة بعد الظهر. رتّب العمل حسب نصف قطر الأثر، واجعل الترتيب جزءاً من مستند النطاق.

أربعة نطاقات، بهذا الترتيب

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

والانضباط الآخر الغائب من معظم الأدلة يتعلق بالدليل نفسه. إذا أثبت اختبار الوصول إلى سجل يحوي بيانات شخصية، فسجّل الطلب ورمز الحالة وعدد السجلات المتأثرة وأسماء الحقول؛ واختزل قيمة عيّنة واحدة ليكون الناتج قابلاً لإعادة الإنتاج؛ ثم احذف الجسم. أما التقاط صورة فاتورة عميل لإثبات نتيجة فهو الطريق الذي يحوّل اختباراً أمنياً إلى حادث حماية بيانات، وهو أول سؤال يسأله محامٍ عند تدقيق لاحق. وفي تركيا يطلب قانون KVKK، وفي أوروبا اللائحة العامة لحماية البيانات، المبدأ نفسه: قلّل واحتفظ بما يثبت النتيجة فقط.

ما تستطيعه الأتمتة وما لا تستطيعه

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

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

وما يمكن أتمتته أضيق وأثمن مما تتوقعه معظم الفرق: مصفوفة التفويض نفسها. سكربت بحسابين مُهيّأين لكل دور، يُشغَّل على بيئة التجهيز مع كل نشر، ويتحقق من أن المعرّف الغريب يعيد 403 أو 404 وأن معرّف الطالب نفسه يعيد 200. كل نقطة حرجة تأخذ صفاً، والسكربت يُسقط البناء عند 200 عبر الحسابات، فيتوقف الفريق عن إعادة إنتاج العيب نفسه في معالجات جديدة. هذا الضابط الوحيد الذي يغيّر اتجاه المنحنى، وهو أيضاً أثر إعادة الاختبار الذي يُبقي النتيجة اليدوية مغلقة.

التقرير: خطورة تُقاس بالوصول لا بالتصنيف

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

مرّر العيب نفسه على هذه المحاور مرتين وستظهر النقطة. تفويض كائن معطوب على نقطة داخلية خلف سياسة شبكة ودور مميز نتيجة متوسطة. وتفويض كائن معطوب على نقطة عامة تعيد فاتورة عميل آخر تعرّض قابل للتبليغ لبيانات شخصية يمكن لسكربت تكراره ألف مرة في الدقيقة، وعلى التقرير أن يقول المعدل بصوت عالٍ، لأن المعدل هو ما يحوّل عيباً إلى حادث.

وما يُغلق النتيجة هو الطلب نفسه على البيانات المُهيّأة ذاتها وهو يعيد 403 أو 404، لا صورة لوحة خضراء. والادعاء يُضاف إلى خط النشر ليعيش الإغلاق أطول من صاحبه. وتُكتب نافذة إعادة اختبار في الارتباط - ثلاثون يوماً نموذجية - تغطي الإصلاح لا التقرير. وتُذكر المخاطر المتبقية حين يكون الإصلاح جزئياً، لأن الإصلاح الجزئي هو النتيجة الطبيعية.

النطاق والكلفة: لماذا عدد الأيام هو النقاط مضروبة في الأدوار

تتقارب قوائم الأسعار المنشورة على الشكل نفسه لأنها كلها تسعّر الحساب ذاته. تجعل قائمة أسعار Budget Security لعام 2026 اختبار الواجهة أربعة إلى خمسة أيام لعشر إلى خمسة وعشرين نقطة، وستة إلى تسعة أيام لأربعين إلى ثمانين نقطة بأدوار مختلطة، وعشرة إلى سبعة عشر يوماً لمئة نقطة أو أكثر موزعة على خدمات عدة. وتتجمّع عروض المورّدين المنشورة لتقييم متوسط الحجم بين 3,000 و28,000 تقريباً، مع أرضية نحو 14,500 عند عدة شركات لأي عمل بمقاس المؤسسات. ولا معنى لأي من هذه الأرقام قبل معرفة أي النقاط وبكم هوية، ولهذا تكون مصفوفة التغطية الصفحة الأولى في العرض لا ملحقاً.

ستة عوامل تحرّك التقدير، ويمكن للعميل عادةً التأثير في كل منها. عدد الطرق المدعومة في النقطة، لأن المورد الذي يدعم الإنشاء والقراءة والتحديث والحذف أربعة اختبارات لا واحد. ونموذج الأدوار، لأن خمسة أدوار تضرب المصفوفة، وتدرّج الأدوار يضيف اختبارات رفع الامتياز فوقها. وهل السطح موثق، لأن الاكتشاف أيام عمل قبل أول ادعاء. وهل يوفر العميل الحسابات والبيانات المُهيّأة لكل دور، لأن بنائها قد يكون خمس الارتباط وحده. وهل اختبار الحمل داخل النطاق، وهذا يغيّر مستند التفويض كما يغيّر التقويم. وشروط إعادة الاختبار، لأن إصلاحاً لا يُعاد اختباره ادعاء لا نتيجة.

ولذلك فإن ما يجب أن يرد في مستند النطاق بسيط ومحدد: قائمة النقاط وعددها، وقائمة الأدوار، والبيئات، ومن يملك بيانات الاختبار، ونافذة الاختبار، وهل يُسمح باختبار الحمل أو حجب الخدمة أم يُستثنى صراحةً، وشكل التقرير، ونافذة إعادة الاختبار، وسطر ينص على أن واجهات الشركاء والمورّدين التي يستهلكها المنتج خارج النطاق بلا تفويض كتابي منها. ويُخطَّط اختبار اختراق يغطي الويب والجوال مع الواجهة عادةً كارتباط واحد، لأن الجلسة نفسها وحسابات الاختبار نفسها تخدم الاثنين.

الحد القانوني ومستند التفويض

كل طلب في اختبار واجهة هو طلب وصول إلى نظام شخص آخر، والشيء الوحيد الذي يفصل الاختبار عن الهجوم مستند موقَّع قبل إرسال أول طلب. يسمّي ذلك المستند الأنظمة وأسماء النطاقات، وعناوين المصدر، والنافذة الزمنية، والتقنيات المسموحة، والتقنيات المستثناة، وقواعد التعامل مع البيانات، وجهة الاتصال في الطوارئ، والشخص المصرّح له بتوسيع النطاق كتابياً أثناء الاختبار. وإذا احتاج الاختبار توسيعاً في منتصفه، فالتوسيع يحدث على الورق أولاً؛ و«امضِ قدماً» الشفهي من مهندس ليس تفويضاً باسم الشركة.

وهناك ثلاثة حدود تُطمس كثيراً وتستحق النص الصريح. اختبار أنظمتك بلا قيد في الإذن وبقيد في ضبط التغيير. اختبار أنظمة العميل محدود بالعقد، والعقد لا يمتد إلى مورّديه. واختبار واجهة يستهلكها منتجك - معالج دفع أو خدمة خرائط أو خدمة هوية - لا يصرّح به كونك عميلاً لديهم، وشروطهم تمنعه في كل الحالات تقريباً؛ والبديل الصحيح هو بناء خادم محاكاة يعيد ردوداً مشوّهة ومتأخرة ومعادية واختبار تعامل تكاملك معها. أما واجهة اكتشفتها ولا تملكها فليست في النطاق أبداً، مهما بدا عيبها واضحاً.

والحد الأخير هو الذي يحدد هل ينتهي الارتباط كتقرير أمني أم كحادث: إثبات الأثر ليس أخذ البيانات. أثبت الوصول بسجل واحد وحقول محدودة، وسجّل العدد، وتوقف. واختبار واجهة يسحب جدول العملاء «لإظهار الحجم» قد انتقل من اختبار مصرّح به إلى معالجة غير مصرّح بها، ولن يقرأ محامي العميل مستند النطاق بتعاطف في تلك اللحظة.

خطة اليوم الأول وترتيب الإصلاح

الخطة أدناه مرتّبة عمداً لتأتي الادعاءات الرخيصة عالية المردود قبل كل ما يمس البيانات أو الحمل. تتسع ليوم واحد على واجهة ناضجة بحسابات مُهيّأة، وتُنتج النتيجة الأهم في معظم الارتباطات: غياب فحص مستوى الكائن في نقطة مجموعة.

اليوم الأول، بهذا الترتيب

  1. قارن المواصفة بالحركة المرصودة وسجّل كل نقطة غائبة عن الاثنين. اسأل ما هي قبل اختبارها.
  2. ابنِ مجموعة الهويات: مستخدمان في مستأجرين مختلفين، ودور ثانٍ، ومسؤول، وطالب بلا مصادقة.
  3. نفّذ ادعاءات الرمز التسعة وسجّل نافذة الإبطال بالدقائق.
  4. نفّذ مصفوفة تفويض الكائن على النقاط الخمس الأعلى تصنيفاً للبيانات، ثم على كل نقاط المجموعة.
  5. قارن المعرّف الغريب بالمفقود في الحالة والجسم والتوقيت ونص الخطأ.
  6. أرسل ثلاثة طلبات إسناد جماعي لكل نقطة كتابة: حقل مجهول، وحقل مميز، وإفراط قراءة.
  7. قِس الحد لكل حساب في الدخول والرمز لمرة واحدة وإعادة تعيين كلمة المرور وقبول الدعوة.
  8. نفّذ سباق الطلبين على أعلى تغيير حالة قيمةً.
  9. اختبر رفعاً واحداً ومستقبِل ويب هوك واحداً.
  10. اكتب رقم التغطية والدليل طازج: الادعاءات المنفذة مقسومة على النقاط مضروبة في الهويات.

وترتيب الإصلاح متطابق تقريباً في كل تقرير، ويستحق الذكر بدل ترتيب النتائج بدرجة CVSS وحدها. أولاً، افرض تفويض الكائن في طبقة مشتركة واحدة تمر بها كل المعالجات، لأن ذلك يغلق فئة لا حالة. ثانياً، تحقق من الرموز على الخادم بخوارزمية مثبتة وجمهور ومُصدِر مفحوصين، لأن رمزاً يقبله خدمة أخرى أداة حركة جانبية. ثالثاً، ضع حدوداً لكل حساب تعدّ الفشل وتقفل، لأنها الضابط الوحيد الذي يقيّد حساب فضاء المفاتيح. رابعاً، عرّف إسقاطات الاستجابة حتى تتوقف النماذج عن تسريب حقول لم يطلبها أحد. خامساً، أضف قيود قاعدة البيانات ومفاتيح التكرار إلى تغييرات الحالة التي تحرّك مالاً أو مخزوناً. سادساً، اكتب سياسة 403 أو 404 مرة واحدة وفرّضها في معالج الأخطاء.

لا شيء من ذلك يحتاج إعادة كتابة، وكل ذلك قابل للاختبار بعدها بالسكربت الذي وجد المشكلة. وهذا هو المعيار الذي يستحق أن يُحاسب عليه اختبار واجهة: تقرير يمكن إعادة تشغيل نتائجه، وعدّ تغطيته، وتترك إصلاحاته ادعاءً في خط الأنابيب.

لوحة مراقبة Sphnix

تابع الرسائل والموقع والشبكات الاجتماعية وإشارات النشاط من خلال لوحة مراقبة مصرح بها.

جرّب Sphnix الآن →

هل تحتاج إلى مساعدة احترافية؟

استعن بخبراء أمن أخلاقيين موثقين للاسترداد المصرح به واختبارات الأمان ودعم الحوادث.

استئجار خبير →

خدمات احترافية

استكشف خدمات الأمن السيبراني للتدقيق والاسترداد والتحقيق الرقمي وتعزيز الحماية.

عرض الخدمات →

هل لديك أسئلة؟ خبراؤنا جاهزون للمساعدة.

تواصل معنا للحصول على استشارة مجانية →

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

إيقاعان لا واحد. مصفوفة التفويض - حسابان مُهيّآن لكل دور يتأكدان من أن معرّف كائن غريب يعيد 403 أو 404 - يجب أن تعمل مع كل نشر إلى بيئة التجهيز، لأن كلفتها دقائق وفشلها ينتج تراجعاً لا يلاحظه أحد. أما الارتباط اليدوي الكامل فيُجرى سنوياً على الأقل، ومع أي تغيير في نموذج التفويض أو نموذج المستأجرين أو مزوّد الهوية أو تكامل شريك، لأن تلك التغييرات تُبطل الافتراضات التي بُني عليها الاختبار السابق. وتشدّد البيئات المنظَّمة الحد السنوي: اشتراطات PCI DSS تطلب اختبار اختراق للتطبيقات سنوياً وبعد أي تغيير جوهري، والضابط A.8.8 من ISO 27001 يتوقع إدارة مستمرة لا سنوية.

لا. العثور عليه يحتاج هويتين صالحتين ومعرّف كائن صالح لكل منهما، ولا يملك الماسح أياً منهما: يصادق بحساب واحد على الأكثر، وليس لديه سبب لحمل كائنات مستأجر آخر، ويعتبر 403 نهاية الحديث لا بداية الاختبار. الماسحات مفيدة في إعداد النقل وإصدارات الاعتماديات والمطابقة للمواصفة وتشويش المخطط، أما عيوب التفويض التي تسبب معظم حوادث الواجهات فيجدها سكربت يسجّل الدخول مرتين ويبدّل معرّفاً.

خمسة أشياء: المواصفة (OpenAPI أو protobuf أو المخطط) مع ثلاثين يوماً من سجلات البوابة لتوحيد الجرد؛ وحسابات مُهيّأة لكل دور في كل مستأجر ببيانات اعتماد موثقة؛ ومستأجر اختبار مخصص أو بيانات اختبار موسومة بوضوح حتى لا تمس الاختبارات المدمّرة سجلات حقيقية؛ وتفويض كتابي يسمّي الأسماء والنافذة الزمنية والتقنيات المسموحة؛ وشخصاً يستطيع الموافقة على تغيير النطاق كتابياً أثناء الاختبار. وأكثر ما يحدث فرقاً هو الحسابات المُهيّأة، فبناءها حين لا يوفّرها العميل قد يكون خمس الارتباط وحده.

تضع قوائم الأسعار المنشورة واجهة من عشر إلى خمسة وعشرين نقطة في أربعة إلى خمسة أيام عمل، وأربعين إلى ثمانين نقطة بأدوار مختلطة في ستة إلى تسعة أيام، ومئة نقطة أو أكثر على خدمات عدة في عشرة إلى سبعة عشر يوماً؛ وتتجمّع عروض المورّدين لتقييم متوسط الحجم بين 3,000 و28,000 تقريباً، مع أرضية نحو 14,500 عند عدة شركات. والمحرك هو عدد النقاط مضروباً في عدد الهويات، يضاف إليه جهد الاكتشاف إذا كان السطح غير موثق، وما إذا كان العميل يوفّر بيانات الاختبار. اطلب من أي مورّد مقام التغطية، فيتبعه عدد الأيام.

ليس استناداً إلى علاقتك بهم كعميل. شروط المورّد تمنع في الغالب اختبار الأمن على خدمته، وتفويضك يغطي أنظمتك لا أنظمته. اختبر جانبك بدلاً من ذلك: أقِم خادم محاكاة يعيد ردوداً مشوّهة ومتأخرة ومكررة ومعادية، وتأكد من أن تكاملك يتحقق منها، ويعالج الأخطاء دون تسريب بيانات، ويفشل إلى الجهة الآمنة. وإذا اعتقدت أن واجهة المورّد غير آمنة، فأبلغ جهة الاتصال الأمنية لديه أو برنامج الإفصاح بدل اختبارها.

شارك هذا المقال

أنت تعرض نسخة مخزنة مؤقتا من هذا المقال. قد تظهر التحديثات قريبا.