الأمان والمراجعة
الماسح التلقائي، بيان الصلاحيات، وقواعد الكود الآمن.
إزاي تتم المراجعة
كل تقديم يتفحص تلقائيًا قبل ما أي إنسان يبصّ عليه. الماسح هو 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, eot)، csv, 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. تحقق من السر/التوقيع المشترك قبل أي شغل، وارفض لما يبقى ناقص (راجع تكاملات الموردين).
- خليه مستقل. لا كتابة خارج جداول وتخزين البلاجن بتاعك.