الأمان والمراجعة

الماسح التلقائي، بيان الصلاحيات، وقواعد الكود الآمن.

إزاي تتم المراجعة

كل تقديم يتفحص تلقائيًا قبل ما أي إنسان يبصّ عليه. الماسح هو Plugins\DeveloperMarketplace\Services\MarketplaceSecurityScanner. بيمشي على الأرشيف اللي رفعته، يفحص البنية، يمنع أنواع الملفات الخطرة، يبحث في كل ملف نصي عن أنماط خطرة، ويطابق القدرات اللي كودك بيستخدمها مع الصلاحيات اللي أعلنتها في plugin.json.

أي اكتشاف حرج (critical) يوقف التقديم فورًا. الاكتشافات الأقل خطورة (عالية، تحذير) تُعرَض على المراجِع اللي يقرر. اكتب كود نظيف ومعلَن ومستقل وهتعدّي بسهولة.

حدود الأرشيف

الحزمة لازم تبقى في الحدود دي وإلا تترفض:

الحد القيمة
أقصى عدد ملفات في الأرشيف 5,000
أقصى حجم كلي غير مضغوط 300 ميجابايت
البايتات المفحوصة لكل ملف نصي أول 2 ميجابايت
أرشيفات متداخلة (zip, rar, tar, gz, tgz, 7z, bz2) غير مسموح
مسارات خارجة/مطلقة/رموز تحكم في أسماء المدخلات تُمنع كحرجة

أنواع الملفات المسموحة والممنوعة

الامتدادات المسموحة: php, blade, css, js, mjs, cjs, json, md, txt, yml, yaml, html, vue, ts, map, svg، صور (png, jpg, jpeg, gif, webp, ico)، خطوط (woff, woff2, ttf, otf, eotcsv, po, mo.

الامتدادات الممنوعة: exe, sh, bat, cmd, com, phar, so, dll, bin, ps1, py, pl, rb, jar, app, msi, run, ini — أي حاجة تنفيذية أو خارج حزمة الويب.

أنماط الكود اللي الماسح بيرصدها

الأنماط دي في PHP بتتطابق في كودك. الأنماط الحرجة توقف تلقائيًا:

النمط الخطورة السبب
eval(...) حرج تنفيذ كود عشوائي
exec, shell_exec, system, passthru, proc_open, popen, pcntl_exec حرج تنفيذ أوامر نظام
شل بالباك‌تيك `... $x ...` حرج تنفيذ شل
create_function(...) حرج كود ديناميكي
assert('...') بنص حرج كود ديناميكي
base64_decode(...) عالية غالبًا يخبّي كود
gzinflate, gzuncompress, str_rot13 عالية تشويش/فك تشفير
include/require($variable) عالية تضمين ملف ديناميكي
متغيرات المتغيرات $$var عالية تشويش
file_put_contents, fopen, fwrite, unlink, rmdir, mkdir, chmod, rename, move_uploaded_file عالية وصول مباشر للملفات — أعلن file_storage وفضّل Storage::
getenv, putenv, $_ENV, env('...') عالية وصول لمتغيرات البيئة
curl_*, fsockopen, stream_socket_client عالية اتصال خارجي
file_get_contents('http…') / fopen('http…') عن بُعد عالية جلب عن بُعد
Guzzle / `Http::get post …`
DB::statement, DB::unprepared, DB::raw تحذير SQL خام — فضّل الـquery builder / Eloquent

قوالب Blade تتفحص كمان:

النمط الخطورة السبب
بلوكات @php حرج ممنوع PHP تنفيذي في القوالب — احسب فوق في سيرفس/كنترولر
مخرجات غير مهرَّبة {!! !!} عالية خطر XSS — استخدم {{ }}، أو ds_safe_html() للـHTML الموثوق في لوحات الأدمن/التاجر

صرّح بقدراتك

الماسح يكتشف القدرات دي من كودك ويطلب الصلاحية المقابلة في plugin.json:

القدرة تُكتشف من أعلن الصلاحية
Schedule:: / ->daily() / ->cron() / callAfterResolving(Schedule…) schedule
$this->commands(...) / extends Command console_commands
Event::listen / Event::subscribe event_listener
Model::observe(...) eloquent_observer
Storage:: / FileUploadService file_storage

الصلاحيات الصالحة: admin_pages, user_pages, storefront_widget, webhook_listener, migrations, schedule, console_commands, event_listener, eloquent_observer, file_storage, sidebar.

الصلاحيات admin_pages وuser_pages وwebhook_listener وstorefront_widget هي صلاحيات راوت — أعلنها لما البلاجن يسجّل راوتس في المناطق دي.

قائمة مراجعة الكود الآمن

  • هرّب المخرجات. الأصل {{ }} في Blade. استخدم {!! !!} بس مع ds_safe_html() على HTML بتتحكم فيه بالكامل.
  • لا @php في Blade. انقل المنطق لسيرفس أو كنترولر ومرّر المتغيرات.
  • لا SQL خام. استخدم Eloquent والـquery builder؛ بيعملوا parameterisation ليك.
  • صرّح بكل قدرة بتستخدمها، ولا حاجة مش بتستخدمها.
  • تحقّق من كل المدخلات بـForm Requests.
  • فشل مغلق في الـwebhooks. تحقق من السر/التوقيع المشترك قبل أي شغل، وارفض لما يبقى ناقص (راجع تكاملات الموردين).
  • خليه مستقل. لا كتابة خارج جداول وتخزين البلاجن بتاعك.