- بواسطة x32x01 ||
مش علشان تخرب موقع أو تأذي حد
البوست ده توعوي، هدفه يحميك كمبرمج Laravel من أخطاء شفتها بعيني على مدار أكتر من 5 سنين شغل فعلي.
خطأ قاتل: نقل محتويات Public للـ Root
من أكبر المصايب اللي بشوفها إن حد ينقل كل ملفات public للـ root folder علشان يشغّل الموقع بسرعة.
ليه؟ علشان كده أنت بتخلي كل ملفات المشروع Accessable.
يعني لو موقعك:
example.comأي حد يقدر يدخل على:
example.com/.env
example.com/storage/logs/laravel.log
- باسوردات
- مفاتيح API
- أخطاء السيستم
- أسرار المشروع كلها مكشوفة
التزم بالـ Docs الرسمية: https://laravel.com/docs/9.x/deployment
وظبط htaccess أو Nginx بحيث يبدأ من
index.php وهو في مكانه الطبيعي.أداة ممتازة تكشفلك الملفات الحساسة المكشوفة: https://github.com/maurosoria/dirsearch
كارثة التسجيل بدون reCAPTCHA
لو موقعك فيه Registration ومفيش reCAPTCHA يبقى أنت فاتح باب جهنم أي حد يقدر يعمل Loop ويبعت آلاف الطلبات على /register.
مثال توضيحي
PHP:
\Http::post('http://example.com/register',[
'_token' => 'GENERATE_TOKEN',
'name' => uniqid(),
'email' => uniqid().'@gmail.com',
'password' => '123456789aA$',
'password_confirmation' => '123456789aA$'
]); - كل Register بيبعت Email
- كل Email له Limit
- ومع شوية Requests الإيميل يقف

أي حد يقدر يعرف Email Provider بتاعك من DNS: https://tools.nafezly.com/dns-lookup
فحص نوع الملف بالـ Extension = مصيبة
إنك تفحص الملف بـ الامتداد بس يعني بتضحك على نفسك ممكن أرفع ملف ملغوم واسميه:
image.pngوهو مش صورة أصلاً
تخزين الملفات بنفس اسمها الأصلي
لو بتخزن الملفات باسمها الأصلي أو حتى معدل عليه شوية يبقى أنت بتزرع ثغرة بإيدك عن طريق أدوات زي BurpSuite المهاجم يغير اسم الملف أثناء الرفع لـ:
../../.envوأظن الرسالة وصلت
- تشيل Special Characters
- تولد اسم جديد
- تفصل التخزين عن الاسم الأصلي
Storage Folder قابل للتنفيذ = اختراق مباشر
إنك تدي storage صلاحية 777 علشان الموقع يشتغل ده إعلان رسمي إنك عايز تتخترق أي ملف PHP ملغوم يترفع
يتنفذ
وانتهى الموضوع.
directories 775
files 664
خطر ملفات SVG
ملفات SVG مش صور بريئة يعني:
- سرقة Cookies
- اختراق حسابات
- XSS صريح
PHP:
$request->validate([
'file' => 'required|mimes:images/*'
]); PHP:
$request->validate([
'file' => 'required|mimes:jpg,jpeg,png|max:2000'
]);
اسمح بالملفات… متمنعش
أكبر غلطة: إنك تمنع امتدادات بعينها الصحيح: اسمح بامتدادات محددة فقط
PHP:
$request->validate([
'file' => 'required|mimes:zip,pdf|max:2000'
]);
خطر XSS مع {!! !!}
لو استخدمت {!! $var !!} مرة واحدة بس والهاكر شافها أنت كده فتحتله الباب XSS هنا خطير جدًا وبيحصل وانت مش واخد بالك.
{{ $var }} ولو مش فاهم XSS كويس ابعد عن {!! !!} خالص.
SQL Injection مع Query Builder
استخدام whereRaw مع input من المستخدم يعني اختراق مباشر. SQL:
DB::table('posts')
->whereRaw('id='.$id)
->first(); استخدم ORM:
\App\Models\Post::where('id', $id)->first();
APP_DEBUG = فضيحة أمنية
ترك APP_DEBUG=true في production بيكشف:- Paths
- Repo
- Commits
- أسرار الكود
اقفله فورًا في production.
الخلاصة المهمة
لو استفدت بمعلومة واحدة بس فالبوست نجح Laravel قوي بس أي إهمال بسيط يحوّله لكابوس أمني
الأمان مش نقص معرفة أغلب الوقت نقص تركيز أو استعجال.