يستغل الغشاشون أحداث الشبكة لمنح أنفسهم المال وإنشاء المركبات والحصول على العناصر. تعرّف على كيفية عمل استغلال المُشغّلات في FiveM، ولماذا يصعب تدقيقها يدويًا، وكيف يرسم Trigger Finder من ZeroTrust ويعلّم كامل سطح هجوم الأحداث لديك.
إذا كنت تدير خادم FiveM منذ فترة، فقد واجهت هذه المشكلة: لاعب يمتلك قائمة غش يمنح نفسه المال، ويُنشئ المركبات، أو يملأ حقيبته بالعناصر، دون أن يلمس الواجهة المقصودة إطلاقًا. هو لا يكسر محرك اللعبة؛ بل يستدعي أحداث الشبكة الخاصة بخادمك مباشرة.
هذه هي الطريقة الأكثر شيوعًا لاستغلال خوادم FiveM، و«أمّن أحداثك» هي النصيحة المعتادة. المشكلة أن هذه النصيحة تفترض أنك تعرف مسبقًا أي الأحداث مكشوفة. وعلى خادم يشغّل عشرات الموارد، لا يكاد أحد يعرف ذلك. يشرح هذا المقال كيف يعمل استغلال المُشغّلات، ولماذا يصعب إصلاحه يدويًا، وكيف حوّلنا المشكلة بأكملها إلى أداة: Trigger Finder.
في FiveM، تتواصل السكربتات عبر حدود العميل والخادم باستخدام أحداث الشبكة. يستدعي العميل TriggerServerEvent فيشغّل الخادم المُعالِج المُسجَّل لاسم ذلك الحدث. هكذا تعمل اللعبة الشرعية تمامًا — وهذا بالضبط ما يستغله الغش.
يمكن لقائمة الغش إطلاق أي حدث شبكة يسجّله خادمك، بأي وسائط يريدها. وإذا كان لأحد الموارد حدث خادم يضيف المال أو يمنح عنصرًا أو يُنشئ مركبة ويثق بالقيم التي يرسلها العميل، فإن الغشاش يستدعيه مباشرة ببساطة:
-- قابل للاستغلال: الخادم يثق بكل ما يرسله العميل
RegisterNetEvent("shop:buyItem", function(item, amount)
local ply = FX.GetPlayerFromSource(source)
-- لا فحص للسعر ولا تحقق — العميل يتحكم بكل شيء
ply.addItem(item, amount)
end)
-- الغش ببساطة يستدعي:
-- TriggerServerEvent("shop:buyItem", "gold_bar", 9999)إصلاح حدث واحد مفهوم جيدًا: تحقَّق من جهة الخادم، ولا تثق أبدًا بمدخلات العميل. نغطّي الأنماط الدقيقة في دليل أمان أحداث Lua في FiveM. الصعوبة ليست في إصلاح حدث واحد، بل في معرفة أين توجد جميعها.
يشغّل خادم تقمّص الأدوار النموذجي من 50 إلى أكثر من 300 مورد، كثير منها سكربتات من طرف ثالث لم تكتبها أنت. وقد يسجّل كل منها عشرات أحداث الشبكة — أي ربما آلاف الأحداث المبعثرة في ملفات لم تفتحها قط. لا يمكنك تأمين ما لا تراه، ولن يقرأ أحد كل مورد يدويًا بحثًا عن مُعالِج addMoney منسيّ.
بدلًا من نشر مزيد من التوثيق، بنينا التدقيق مباشرة داخل لوحة ZeroTrust. كانت الفكرة بسيطة: إذا كان الجزء الخطير من الخادم هو سطح أحداثه، فينبغي أن يتمكن كل مالك من رؤية هذا السطح بأكمله بنظرة واحدة، مرتبًا حسب الخطورة، مع مسار مباشر إلى كل عنصر.
Trigger Finder ماسح مدمج في لوحة ZeroTrust. تشغّل فحصًا يبدأ من الخادم، فيمرّ عبر مواردك ويستخرج كل حدث ومُشغّل يجده — ويعلّم كلًا منها بمورده وملفه ورقم سطره وجهته (عميل أو خادم) واسم حدثه.
بدلًا من التخمين، تحصل على جرد كامل وقابل للبحث لكل حدث شبكة يكشفه خادمك. يُسجَّل كل مُشغّل مع مكان وجوده واتجاه تدفقه — عميل ← خادم، خادم ← عميل، عميل ← عميل، أو خادم ← خادم — لترى فورًا أيّها يمكن لعميل خبيث الوصول إليه.
النتيجة هي توزيع للمخاطر لخادمك بأكمله: كم عدد المُشغّلات الآمنة مقابل الحرجة، وأي الموارد تحتوي أكثر الأحداث خطورة، وكيف ينقسم كل شيء بين العميل والخادم.
كل نتيجة تعود إلى موردها ← ملفها ← سطرها، مع عرض لسياق الكود لقراءة المُشغّل في مكانه. وعندما يعلّم Trigger Finder مُعالِج addItem خطيرًا، تعرف بالضبط أي سكربت وأي سطر يجب تحصينه — دون بحث.
كل خادم مختلف، خاصة مع أطر العمل المخصّصة. يمكنك ضبط كلماتك المفتاحية وقائمة الأحداث الخطيرة الخاصة بك، كي يعلّم Trigger Finder أسماء الدوال المهمة لسكربتاتك أنت، لا الافتراضية فقط.
يخبرك Trigger Finder بما يجب تأمينه. وسدّ الفجوة هو الخطوة التالية: تحقّق من كل حدث مُعلَّم من جهة الخادم، واسترجع القيم بطرق من جهة الخادم بدلًا من الثقة بالعميل، وافحص حالة اللاعب وموقعه وصلاحياته قبل التصرّف. كل الأنماط — إضافة إلى متغيّرات convar الأمنية في FXServer التي يجدر تفعيلها — موجودة في دليل أمان أحداث Lua في FiveM.
لا يمكنك الدفاع عن سطح هجوم لم ترَه قط. يحوّل Trigger Finder النصيحة الغامضة «أمّن أحداثك» إلى قائمة تحقّق ملموسة مولَّدة من خادمك الفعلي — لتعرف بدقة ما هو مكشوف وأين تصلحه.