الخلاصة

  • تعلن صفحة WHOIS Crypt الحالية نموذجاً يرسل طلب POST إلى المصدر نفسه. حقل كلمة المرور من النوع type="text" واسمه عند الإرسال plaintextpassword. لم ندخل أي كلمة مرور ولم نرسل النموذج في هذا التحقيق.
  • تقول إرشادات أعضاء AFRINIC إن قيمة التجزئة وحدها ينبغي أن تُشارك مع AFRINIC، وإن على العضو حفظ كلمة المرور الصريحة بأمان. لذلك يحتاج مسار الإنشاء الوسيط إلى إيصال تشغيلي قابل للتحقق، لا إلى افتراض حدوث تسريب.

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

تبدأ الطريق العامة من صفحة أدوات WHOIS لدى AFRINIC. تعرض الصفحة غرض إنشاء قيم BCRYPT-PW وتحيل المستخدم إلى تطبيق WHOIS Crypt منفصل. في نسخة HTML الأصلية التي حُفظت في 14 سبتمبر 2026، يحمل النموذج المعرّف myForm، ويستخدم الطريقة POST، ويحدد إجراءً نسبياً هو ?lang=en#cli. التسمية الظاهرة هي “Password”، لكن عنصر الإدخال ليس type="password"؛ بل هو type="text". ويحمل المعرّف والاسم المرسل نفسيهما: plaintextpassword. أما الزر فيقول “Generate hash”.

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

يمنح معيار HTML هذه القراءة أساساً واضحاً. فالنموذج يضم عناصر تحكم يستطيع المستخدم تزويدها ببيانات يمكن إرسالها إلى خادم لمعالجتها. ويعرض قسم المطورين إرسال المعلمات داخل جسم طلب HTTP POST مثالاً اعتيادياً للمعالجة على الخادم. وبما أن الإجراء نسبي، فإنه يُحل داخل مصدر الصفحة نفسه، أي whois-web.afrinic.net. لذا يعلن المستند مساراً تسلم فيه نقطة AFRINIC قيمة تطبيقية اسمها كلمة المرور الصريحة قبل حساب التجزئة.

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

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

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

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

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

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

نوع الحقل يكشف قراراً أصغر. يعرّف HTML حالة type="password" بوصفها تحكماً للمعلومات الحساسة يحجب الإدخال. أما type="text" فهو حقل نص عادي. تستخدم الصفحة المحفوظة النوع الثاني. لا يثبت ذلك أن شخصاً نظر إلى الشاشة، ولا أن كلمة مرور كُشفت، ولا أن إعداد BCRYPT ضعيف. إنه يثبت فقط أن الصفحة لم تطلب من المتصفح سلوك الإخفاء المخصص لكلمات المرور.

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

وتدخل نصوص المتصفح في الحد نفسه. تحمل الصفحة نص Cloudflare Turnstile من challenges.cloudflare.com، إلى جانب jQuery وMustache وmain.js عبر مسارات محلية. تشرح إرشادات OWASP لإدارة JavaScript التابع لطرف ثالث لماذا يمثل هذا الكود حد تغيير وبيانات: ما يُنفذ في سياق الصفحة قد يتفاعل، من حيث المبدأ، مع مستندها، في حين يستطيع المورد تحديث ما يقدمه.

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

تساعد مراجعة main.js المحلي المرتبط في نفي استنتاج آخر متسرع. لا تحتوي النسخة المحفوظة على myForm أو plaintextpassword أو BCRYPT أو معالج لتوليد Crypt. يهيئ الملف واجهة أخرى عندما يجد العنصر create-container، ويتولى تحميل قوالب كائنات WHOIS وتحرير خصائصها وحفظها. لذلك لا يقدم هذا الملف دليلاً على أن كلمة مرور نموذج Crypt تُجزأ محلياً قبل POST.

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

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

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

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

بدلاً من ذلك، يمنح اسم الحقل العلني فريق التشغيل شرطاً قابلاً للفحص: يجب ألا تظهر قيمة plaintextpassword في سجلات التطبيق أو الوكيل أو الآثار الموزعة أو التحليلات أو تقارير الخطأ أو مواد الدعم. ولا تكفي إجابة «نستخدم HTTPS»، لأن TLS يحمي مسار النقل ولا يضبط النسخ داخل الطرف المستقبل.

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

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

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

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

وينبغي للدليل أن يتبع الاختيار. إذا كانت عبارة «التجزئة فقط» تصف قيمة كائن WHOIS النهائية، فليُذكر هذا القيد. وإذا كانت تصف المسار كله، فلا يتسق معها POST بعيد. وفي الحالتين ينبغي تحذير المستخدم من إدخال كلمة مرور مستخدمة حالياً أو معاد استخدامها لمجرد تجربة الأداة. لم يفعل هذا التحقيق ذلك.

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

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

المصادر