لنفرض أن لديك اختباراً نهائياً في معمل الحاسب، والطلاب يحلونه على Moodle من المتصفح، فما الذي يمنع الطالب من فتح تبويب جديد يبحث فيه عن الإجابة، أو يسأل فيه أداة ذكاء اصطناعي، أو ينسخ السؤال ويرسله لزميله؟ الإجابة أن اختبار Moodle Quiz وحده لا يمنع شيئاً من ذلك، لأنه يعمل داخل متصفح عادي يملك الطالب كل أدواته. والحل الذي تستخدمه الجامعات لهذا هو Safe Exam Browser، واختصاراً SEB، وهو متصفح يقفل الجهاز طوال الاختبار، وMoodle يدعمه في كوده الأساسي. وكما شرحنا في دليل Moodle كيف تنشئ اختباراً ويحله الطالب، ففي هذا المقال سوف نتناول:
- ما هو SEB، وعلى أي أجهزة يعمل، وكيف يعرف Moodle أن الطالب داخله فعلاً.
- ما الذي يمنعه SEB وما الذي لا يراه، بصراحة.
- إعداد اختبار في Moodle 5.3 يتطلب SEB، والصفحة التي يراها الطالب في متصفح عادي، وما الذي يوجد في ملف الإعدادات الذي يحمله.
- تجربة التحقق من جهة السيرفر بالترويسات التي يرسلها SEB: بلا ترويسة، وبترويسة خاطئة، وبالصحيحة.
- مفاتيح المتصفح Browser Exam Keys، ونصائح ليوم الاختبار.
ما هو Safe Exam Browser؟
SEB مشروع مفتوح المصدر تطوره خدمات تقنية المعلومات في جامعة ETH Zurich، وكود نسخة Windows منشور برخصة MPL-2.0 في مستودعها على GitHub. وصفحة التعريف الرسمية تصفه بأنه تطبيق كشك Kiosk يقفل الجهاز ويشغل متصفح SEB وحده، ويمنع اختصارات النظام مثل Alt+F4 والزر الأيمن للفأرة، والانتقال إلى تطبيق آخر بـ Alt+Tab. والإصدارات الحالية بحسب صفحة التنزيل كما يلي:
| النظام | الإصدار | الحد الأدنى |
|---|---|---|
| Windows | 3.10.2 الصادر في 8 مايو 2026 | Windows 10 الإصدار 1803 أو أحدث، وWindows 11 |
| macOS | 3.7.1.1 الصادر في 1 أكتوبر 2026 | macOS 12 أو أحدث |
| iOS وiPadOS | 3.7.1 | الإصدار 12 أو أحدث |
ولاحظ أن الصفحة لا تذكر Linux ولا ChromeOS ولا Android، فإذا كانت أجهزة المعمل Chromebook فلن يعمل عليها SEB، وهذه أول نقطة تحسمها قبل أن تعد الطلاب بالاختبار الآمن.
كيف يعرف Moodle أن الطالب داخل SEB؟
الطريقة البسيطة هي أن يفحص Moodle اسم المتصفح User-Agent، فإذا وجد فيه كلمة SEB سمح بالدخول، وهذه الطريقة موجودة فعلاً في Moodle في الخيار «Use SEB client config»، فالكود يفحص هذه الكلمة فقط، ولكنها أضعف الطرق على الإطلاق، لأن أي متصفح يستطيع أن يرسل أي اسم يريده. والطريقة الأقوى هي المفاتيح، والصورة التالية تبينها:

وفيما يلي المفتاحان بحسب توثيق Config Key الرسمي:
- مفتاح الإعدادات Config Key: هاش SHA256 لإعدادات SEB كلها بعد ترتيبها بصيغة ثابتة، فإذا تغير أي إعداد تغير المفتاح، ولا يتغير بتحديث برنامج SEB، وهو نفسه في Windows وmacOS وiOS. وMoodle يحسبه تلقائياً من إعدادات الاختبار.
- مفتاح المتصفح Browser Exam Key: واختصاراً BEK، وهو يتغير مع إصدار برنامج SEB نفسه، ولذلك يدخله المعلم أو المدير يدوياً في إعدادات الاختبار لكل إصدار مسموح، وتوثيق Moodle يقول إن Moodle لا يفحصه إذا لم تدخل أي مفتاح.
ولا يرسل SEB المفتاح نفسه، وإنما يرسل في كل طلب هاش SHA256 للرابط المطلوب ملحقاً به المفتاح، في الترويسة X-SafeExamBrowser-ConfigKeyHash للأول وX-SafeExamBrowser-RequestHash للثاني، فلا تصلح القيمة التي التقطت من صفحة لصفحة أخرى، والسيرفر يحسب الهاش نفسه ويقارن.
ما الذي يمنعه SEB وما الذي لا يراه؟
قبل الإعداد عليك أن تعرف حدود الأداة، لأن أكثر خطأ نراه هو أن تعتبر المؤسسة الاختبار آمناً لمجرد أنه يعمل داخل SEB:

والقاعدة هنا أن SEB يحل مشكلة واحدة، وهي استخدام الجهاز نفسه في الغش، ولا يحل غيرها، فالاختبار في المعمل يحتاج مراقباً في القاعة، والاختبار من البيت يحتاج مراقبة بالكاميرا Proctoring أو تصميماً للأسئلة يعتمد على الفهم وليس على الحفظ. وحتى المراقبة بالفيديو داخل SEB اختيارية ومعطلة افتراضياً، والصفحة الرسمية تشترط أن يوافق عليها كل طالب في نافذة حوار.
خيارات SEB في اختبار Moodle
في إعدادات الاختبار قسم «مستعرض الاختبار الآمن»، وأول حقل فيه «يتطلب استعمال مستعرض الاختبار الآمن»، وخياراته كما في توثيق Moodle، وكل خيار غير No يبدأ في الواجهة الإنجليزية بكلمة Yes:
| الخيار | ماذا يعني | متى تستخدمه |
|---|---|---|
| No | لا يتطلب SEB | التدريب والواجبات |
| Configure manually | تضبط إعدادات SEB من النموذج نفسه، وMoodle يبني ملف الإعدادات ويحسب Config Key | أغلب الحالات، وهو ما استخدمناه |
| Use an existing template | قالب يجهزه المدير، والإعدادات اليدوية تكتب فوقه | عندما تريد إعدادات موحدة لكل اختبارات الكلية |
| Upload my own config | ترفع ملف .seb جاهزاً | إعدادات متقدمة لا يعرضها النموذج |
| Use SEB client config | أي إعدادات SEB مقبولة | تجنبه، فهو يفحص اسم المتصفح فقط كما ذكرنا |
التجربة العملية: اختبار يتطلب SEB في Moodle 5.3
بدأنا من مختبر Moodle 5.3 في دليل Moodle، وأنشأنا في مقرر «مقدمة في الشبكات» اختباراً بعنوان «الاختبار النهائي: أساسيات الشبكات» بسؤال صح وخطأ، ومحاولة واحدة، ووقت 30 دقيقة، والخيار «Configure manually» مع كلمة سر للخروج من SEB، كما في الصورة التالية لإعدادات المعلمة:

ماذا يرى الطالب في متصفح عادي؟
دخلنا بحساب الطالب خالد في Chrome، وفتحنا الاختبار، فكانت الصفحة كما يلي:

لاحظ أن Moodle أخفى القوائم والكتل الجانبية، فالقاعدة في كود الإضافة أن كل اختبار يتطلب SEB يعرض بالتخطيط الآمن Secure Layout. والأزرار الثلاثة روابط كما يلي:
- تنزيل مستعرض الاختبار الآمن: إلى صفحة التنزيل في موقع SEB.
- إطلاق مستعرض الاختبار الآمن: الرابط
seb://127.0.0.1:28080/mod/quiz/accessrule/seb/config.php?cmid=4، والبروتوكولseb://يسجله برنامج SEB عند تثبيته، فيفتح البرنامج ويحمل الإعدادات من Moodle ويبدأ الاختبار. وفي الإنتاج يكون الموقع على HTTPS فيصبح الرابطsebs://. - تنزيل التهيئة: الرابط نفسه بـ
http://، ويحمل ملف الإعدادات، وفتحه بعد تثبيت SEB يشغل البرنامج بالإعدادات نفسها.
ما الذي في ملف الإعدادات؟
حملنا ملف الإعدادات بجلسة الطالب نفسها، والمتغير C فيه كوكي الجلسة Session Cookie الذي أخذناه من المتصفح بعد دخول الطالب:
curl -s -D - -H "Cookie: $C" -o quiz.seb "http://127.0.0.1:28080/mod/quiz/accessrule/seb/config.php?cmid=4"HTTP/1.1 200 OK
Content-Disposition: attachment; filename=config.seb
Content-Type: application/sebوالملف 1203 بايت بصيغة plist، وفيه 24 إعداداً، وهذا محتواه:
<plist version="1.0"><dict><key>showTaskBar</key><true/><key>allowWlan</key><false/><key>showReloadButton</key><true/><key>showTime</key><true/><key>showInputLanguage</key><true/><key>allowQuit</key><true/><key>quitURLConfirm</key><true/><key>audioControlEnabled</key><false/><key>audioMute</key><false/><key>browserMediaCaptureCamera</key><false/><key>browserMediaCaptureMicrophone</key><false/><key>enablePrintScreen</key><false/><key>allowSpellCheck</key><false/><key>browserWindowAllowReload</key><true/><key>URLFilterEnable</key><false/><key>URLFilterEnableContentFilter</key><false/><key>hashedQuitPassword</key><string>f76e090013266713e2c73f4c8ffcb2f260e3baeaf1371dd4060fb4eb6a109436</string><key>allowedDisplaysMaxNumber</key><integer>1</integer><key>URLFilterRules</key><array/><key>startURL</key><string>http://127.0.0.1:28080/mod/quiz/view.php?id=4</string><key>sendBrowserExamKey</key><true/><key>browserWindowWebView</key><integer>3</integer><key>examSessionClearCookiesOnStart</key><false/><key>allowPreferencesWindow</key><false/></dict></plist>في الملف أعلاه لاحظ التالي:
startURLهو رابط الاختبار، فالبرنامج يفتحه مباشرة بعد القفل.enablePrintScreenبقيمةfalseيمنع لقطة الشاشة، وallowedDisplaysMaxNumberبقيمة 1 يمنع شاشة ثانية، والكاميرا والميكروفون مغلقان في المتصفح.URLFilterEnableبقيمةfalse، أي أن الطالب يستطيع أن يفتح أي رابط داخل نافذة SEB نفسها إذا وجده في صفحة، فإذا كان في الاختبار روابط خارجية ففعل تقييد المواقع في الإعدادات.hashedQuitPasswordهو هاش كلمة سر الخروج، وحسبناه بأنفسنا فوجدناه SHA256 لكلمة السر نفسها دون أي إضافة Salt:
printf 'Quit-2026' | sha256sumf76e090013266713e2c73f4c8ffcb2f260e3baeaf1371dd4060fb4eb6a109436 *-نجرب التحقق: بلا ترويسة، وبترويسة خاطئة، وبالصحيحة
الآن نرسل الطلب الذي يرسله SEB بأنفسنا. حصلنا على Config Key من إعدادات الاختبار في Moodle بالدالة نفسها التي يستخدمها الفحص:
$s = \quizaccess_seb\seb_quiz_settings::get_by_quiz_id($quiz->id);
echo $s->get_config_key();e414b22b25e03e8cb37e173f47c3b52ba0af342672701b441cd5b5eea74f8e30ثم حسبنا الهاش للرابط ملحقاً به المفتاح، وطلبنا صفحة الاختبار بجلسة الطالب في ثلاث حالات:
URL='http://127.0.0.1:28080/mod/quiz/view.php?id=4'
KEY=e414b22b25e03e8cb37e173f47c3b52ba0af342672701b441cd5b5eea74f8e30
H=$(printf '%s' "$URL$KEY" | sha256sum | cut -d' ' -f1); echo "$H"
curl -s -H "Cookie: $C" "$URL"
curl -s -H "Cookie: $C" -H "X-SafeExamBrowser-ConfigKeyHash: 0000000000000000000000000000000000000000000000000000000000000000" -H "User-Agent: Mozilla/5.0 SEB/3.10" "$URL"
curl -s -H "Cookie: $C" -H "X-SafeExamBrowser-ConfigKeyHash: $H" "$URL"والنص الذي عرضه Moodle في كل حالة كان كما يلي:
7a77c7c6fb47335a6fccb5639815455dd16ea08ce1fd0a44c7fd6b24e5229f13
== بلا ترويسة
لقد تمت تهيئة هذا الاختبار بحيث يمكن للطلبة محاولته حصرياً باستعمال مستعرض الاختبار الآمن.
== ترويسة خاطئة
تعذر التحقق من صحة مفاتيح مستعرض الاختبار الآمن. لطفاً، تأكد من استعمالك لمستعرض الاختبار الآمن مع ملف التهيئة الصحيح.
== الترويسة الصحيحة
محاولة الاختبار
محاولتك ستكون محددة بوقت مقداره 30 دقائق. عندما تبدأ، سيبدأ عداد الوقت التنازلي بالحساب ولا يمكن إيقافه.في المخرج أعلاه لاحظ التالي:
- الترويسة الخاطئة رفضت حتى مع كلمة SEB في اسم المتصفح، لأن الخيار «Configure manually» يفحص المفتاح وليس الاسم.
- الترويسة الصحيحة أظهرت زر «محاولة الاختبار»، أي أن Moodle حسب الهاش نفسه من الرابط والمفتاح ووجده مطابقاً.
- كل رفض سجله Moodle في سجلات الموقع بحدث من الإضافة
quizaccess_sebوفيه السبب «مفتاح تهيئة غير صحيح لمستعرض الاختبار الآمن»، فإذا اشتكى طالب يوم الاختبار فابدأ بهذه السجلات.
ثم وجدنا تفصيلاً مهماً: بعد أن نجح الطلب بالترويسة الصحيحة، أرسلنا الترويسة الخاطئة بالجلسة نفسها، فظهر زر المحاولة أيضاً. والسبب في كود الإضافة، فبعد أول تحقق ناجح يحفظ Moodle النتيجة في جلسة الطالب Session لهذا الاختبار، ولا يفحص المفاتيح مرة أخرى حتى تنتهي المحاولة، وعندها يمسحها:
// Access has previously been validated for this session and quiz.
if ($this->accessmanager->validate_session_access()) {
return false;
}وهذا تصميم مقصود يخفف الفحص على السيرفر، ولكن معناه أن قوة الحماية تعتمد على أن تبقى جلسة الطالب داخل SEB، فاترك إعدادات SEB الخاصة بمسح الجلسة على قيمها الافتراضية، ولا تفتح Moodle في متصفح آخر على الجهاز نفسه أثناء الاختبار.
لماذا تضيف مفاتيح المتصفح BEK؟
قد يتساءل البعض: إذا كان Config Key يعمل كما رأينا، فلماذا أحتاج مفتاحاً آخر؟ والإجابة في طريقة حسابه، فهو هاش للإعدادات، والإعدادات في الملف الذي يحمله أي طالب من زر «تنزيل التهيئة»، أي أن Config Key يثبت أن الإعدادات صحيحة، ولا يثبت أن البرنامج الذي يرسلها هو SEB الأصلي، وهذا ما يقوله توثيقه نفسه حين يصف غرضه بالتأكد أن العميل مهيأ بشكل صحيح. أما Browser Exam Key فيحسبه البرنامج من ملفاته هو مع الإعدادات، ولذلك يتغير مع كل إصدار من SEB. والخطوات كما يلي:
- ثبت على أجهزة المعمل إصداراً واحداً محدداً من SEB، مثل 3.10.2 لـ Windows.
- افتح الاختبار بهذا الإصدار مرة، واقرأ قيمة BEK من البرنامج كما في توثيقه.
- ضعها في حقل «Allowed browser exam keys» في إعدادات الاختبار، ومفتاحاً لكل إصدار مسموح، فإذا كان بعض الطلاب على macOS فلهم مفتاح آخر.
- بعد أي تحديث لـ SEB على الأجهزة، أعد الخطوتين السابقتين، وإلا رفض Moodle الطلاب جميعاً.
وهذا عبء إداري حقيقي، لذلك فهو مناسب للاختبارات النهائية في معامل تديرها المؤسسة، وأما الاختبارات القصيرة من أجهزة الطلاب فيكفيها Config Key مع المراقبة.
قبل يوم الاختبار
- جرب في المعمل نفسه: بالأجهزة نفسها وبحساب طالب تجريبي، قبل يوم على الأقل، لأن برامج الحماية على الأجهزة قد تمنع SEB من العمل.
- ثبت البرنامج مسبقاً: التثبيت على Windows يحتاج صلاحيات المدير، فلا تتركه للطالب في بداية الاختبار.
- أعط المراقب كلمة سر الخروج: فإذا تعطل جهاز طالب خرج المراقب من SEB وأعاد تشغيله.
- اترك وقتاً إضافياً: اختبار بوقت 30 دقيقة يبدأ عداده عند ضغط زر المحاولة، وليس عند تشغيل SEB.
- الصلاحية quizaccess/seb:bypassseb: من يملكها يدخل دون SEB، ويملكها افتراضياً دورا المعلم المحرر editingteacher والمدير manager ليعاينوا الاختبار، فلا تعطها لأي دور يحل الاختبار.
مشكلات شائعة وحلولها
| العرض | السبب | الحل |
|---|---|---|
| «تعذر التحقق من صحة مفاتيح مستعرض الاختبار الآمن» | الطالب فتح الاختبار بإعدادات قديمة أو ملف آخر، أو غير المعلم الإعدادات بعد أن حملها الطالب | يغلق SEB ويفتح الاختبار من زر «إطلاق مستعرض الاختبار الآمن» من جديد |
| الطلاب جميعاً مرفوضون بعد تحديث الأجهزة | تغير BEK مع الإصدار الجديد | أضف المفتاح الجديد إلى الاختبار |
| زر «إطلاق» لا يفعل شيئاً | SEB غير مثبت، فالبروتوكول seb:// غير مسجل | ثبت البرنامج، أو استخدم «تنزيل التهيئة» وافتح الملف |
| المعلم يرى الاختبار في متصفح عادي ويظن أن SEB لا يعمل | دور المعلم المحرر يملك صلاحية التجاوز bypassseb افتراضياً | جرب بحساب طالب |
| جهاز Chromebook لا يفتح الاختبار | SEB لا يعمل على ChromeOS | جهاز Windows أو macOS أو iPad |
تنظيف المختبر
docker compose down -vتدريب عملي
- غير إعداداً واحداً في قسم SEB، مثل إظهار الوقت، ثم حمل ملف الإعدادات من جديد واحسب Config Key كما في الأمر أعلاه، ولاحظ أن الهاش القديم لم يعد يقبل.
- حول الاختبار إلى الخيار «Use SEB client config»، وأرسل طلباً بكلمة SEB في اسم المتصفح فقط دون أي ترويسة، وقارن النتيجة بما رأيناه.
الخلاصة
وصلنا لنهاية الموضوع، وأهم ما فيه:
- SEB متصفح يقفل الجهاز طوال الاختبار، ويعمل على Windows وmacOS وiPadOS فقط، وMoodle يدعمه في كوده الأساسي.
- Moodle يتحقق منه بهاش SHA256 للرابط مع Config Key أو Browser Exam Key، وليس باسم المتصفح، إلا في الخيار «Use SEB client config» فتجنبه.
- Config Key يثبت الإعدادات، والإعدادات في ملف يحمله أي طالب، فأضف BEK للاختبارات النهائية وحدثه مع كل إصدار.
- كلمة سر الخروج موجودة في الملف كهاش SHA256 دون Salt، فاجعلها طويلة وعشوائية.
- بعد أول تحقق ناجح يحفظ Moodle النتيجة في الجلسة حتى نهاية المحاولة.
- SEB لا يرى الهاتف ولا الغرفة، فالاختبار الآمن يحتاج المراقبة معه.
سجل التحديثات
- أكتوبر 2026: كتابة المقال، وتجربة جانب Moodle على Moodle 5.3.0 بإضافة quizaccess_seb، وإصدارات SEB من صفحة التنزيل الرسمية: Windows 3.10.2 وmacOS 3.7.1.1 وiOS 3.7.1.