إصدارات Laravel المشمولة: Laravel 10 و11 و12. معظم الخطوات تنطبق على كل الإصدارات.

لماذا Laravel الافتراضي ليس جاهزاً للإنتاج

إعدادات Laravel الافتراضية مصممة لمساعدة المطورين على التحرك بسرعة. APP_DEBUG=true في .env.example، CORS متساهل افتراضياً، لا rate limiting على مسارات المصادقة — هذه منطقية في التطوير. خطيرة في الإنتاج.

الخطوة 1: قفل ملف .env

اضبط APP_DEBUG=false وAPP_ENV=production قبل أي deployment. تحقق أن خادم الويب لا يخدم ملف .env مباشرة بـ: curl https://yourdomain.com/.env — يجب أن يعيد 404. أضف لـ Nginx:

location ~ /\.env {
    deny all;
    return 404;
}

الخطوة 2: إعداد Security Headers

أنشئ middleware يضيف headers الأمان لكل response وأضفه لـ global middleware stack في bootstrap/app.php:

$response->headers->set('X-Frame-Options', 'SAMEORIGIN');
$response->headers->set('X-Content-Type-Options', 'nosniff');
$response->headers->set('Referrer-Policy', 'strict-origin-when-cross-origin');
$response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
$response->headers->set('Content-Security-Policy', "default-src 'self';");

الخطوة 3: Rate Limiting على مسارات المصادقة

RateLimiter::for('login', function (Request $request) {
    return Limit::perMinute(5)->by($request->ip());
});
RateLimiter::for('password-reset', function (Request $request) {
    return Limit::perHour(3)->by($request->ip());
});

الخطوة 4: تحصين إعدادات الجلسة

في config/session.php: 'secure' => true، 'http_only' => true، 'same_site' => 'strict'، و'encrypt' => true.

الخطوة 5: HTTPS إلزامي

if (app()->environment('production')) {
    URL::forceScheme('https');
}

الخطوة 6: تقييد رفع الملفات

لا تثق بـ MIME type أو امتداد الملف وحده. استخدم مكتبة league/mime-type-detection لفحص محتوى الملف الفعلي. خزّن الملفات خارج مجلد public/.

الخطوة 7: CSRF على جميع المسارات

راجع مصفوفة $except في VerifyCsrfToken — كل مسار مدرج فيها غير محمي بـ CSRF. للـ webhooks، استخدم signature verification بدلاً من استثناء CSRF.

الخطوة 8: صلاحيات مستخدم قاعدة البيانات

مستخدم قاعدة البيانات الخاص بتطبيقك: SELECT وINSERT وUPDATE وDELETE فقط. استخدم مستخدماً منفصلاً بصلاحيات ALTER وCREATE لتشغيل migrations.

الخطوة 9: تسجيل الأحداث الأمنية

استمع لأحداث Login وFailed وLogout وPasswordReset واكتبها لقناة log أمنية منفصلة بصلاحيات append-only على مستوى OS.

الخطوة 10: حماية المسارات الحساسة

للمسارات التي تُغيّر البريد أو كلمة المرور أو تحذف الحساب أو تُصدّر البيانات — استخدم password.confirm middleware المدمج في Laravel.

الخطوة 11: إزالة أدوات التطوير من الإنتاج

Laravel Telescope وDebugbar يجب ألا تكون متاحة في الإنتاج. قيّد Telescope خلف قائمة بريد إلكتروني مسموح بها كحد أدنى.

الخطوة 12: Cloudflare WAF

ضع Cloudflare أمام كل تطبيق Laravel في الإنتاج. فعّل: Bot Fight Mode، OWASP Core Ruleset، rate limiting لمسارات المصادقة، وقيّد خادمك ليقبل الاتصالات من Cloudflare IPs فقط.

هل تريدنا نُدقق تطبيق Laravel الخاص بك؟

نُشغّل الـ 12 فحصاً أعلاه بالإضافة لتقييم OWASP Top 10 الكامل. تقرير مفصّل خلال 5 أيام عمل.