Veb
Laravel loyihasi xavfsizligi: ekspertizadan oldin 12 ta tekshiruv
APP_DEBUG, trustProxies, CSRF, mass assignment, policy'lar, rate limiting va boshqa 12 ta band — Laravel ilovasini ekspertizaga tayyorlash uchun amaliy ro'yxat.
· 9 daq. o'qish

Laravel xavfsizlik bo'yicha yaxshi standartlar bilan keladi: CSRF himoyasi, parollarni xeshlash, shifrlangan cookie'lar. Lekin ekspertizada topiladigan muammolarning katta qismi freymvorkning o'zidan emas, uning sozlanishidan kelib chiqadi. Quyida biz o'z loyihalarimizda va ekspertiza tajribamizda tekshiradigan 12 ta bandni keltiramiz. Misollar Laravel 11/12 tuzilmasi uchun yozilgan.
1. APP_DEBUG va APP_ENV
Production'da .env faylida:
APP_ENV=production
APP_DEBUG=false
APP_DEBUG=true bo'lsa, xato sahifasida stek izi, fayl yo'llari va ba'zan muhit o'zgaruvchilari ko'rinadi. Tekshirish uchun mavjud bo'lmagan marshrutga yoki noto'g'ri parametr bilan so'rov yuboring va javobda ichki tafsilot yo'qligiga ishonch hosil qiling.
2. trustProxies va Host sarlavhasi
Ilova Nginx yoki balanser ortida ishlasa, proksi sarlavhalariga ishonish kerak. Lekin hammasiga emas. O'z mahsulotimizda ekspertiza Host sarlavhasi orqali in'ektsiyani topdi: ilova X-Forwarded-Host ga ishonib, parolni tiklash havolalarini hujumchi ko'rsatgan domen bilan yasashi mumkin edi. Tuzatish — faqat kerakli sarlavhalarga ishonish:
// bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
$middleware->trustProxies(at: '127.0.0.1', headers:
Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO);
})
Qo'shimcha ravishda production'da URL::forceRootUrl(config('app.url')) va URL::forceScheme('https') ni AppServiceProvider da belgilang.
3. CSRF istisnolari
CSRF himoyasi standart yoqilgan, lekin vaqt o'tishi bilan validateCsrfTokens(except: [...]) ro'yxati kengayib ketadi. Har bir istisnoni ko'rib chiqing: u faqat tashqi xizmat callback'i (masalan, to'lov provayderi) uchun bo'lishi va o'sha marshrutda imzo yoki boshqa tekshiruv bo'lishi kerak.
4. Mass assignment
$guarded = [] yoki Model::unguard() — xavfli belgi. Foydalanuvchi so'rovga is_admin=1 yoki balance=... qo'shib yuborsa, u modelga yozilib ketishi mumkin. $fillable da faqat ruxsat etilgan maydonlarni sanab o'ting va $request->all() o'rniga $request->validated() dan foydalaning.
5. Avtorizatsiya: Policy va Gate
Autentifikatsiya "kim?" degan savolga javob beradi, avtorizatsiya esa "bunga haqqi bormi?". /invoices/15 ni ochgan foydalanuvchi /invoices/16 ni ham ocha oladimi? Bu IDOR (CWE-639) deb ataladi. Har bir resurs uchun Policy yozing va controller'da $this->authorize('view', $invoice) yoki Gate::authorize() chaqiring. Ro'yxat so'rovlarini ham joriy foydalanuvchi yoki tashkilot bo'yicha cheklang.
6. Biznes-mantiq va holat tekshiruvi
Ekspertiza bizning platformada ikkita biznes-mantiq topilmasini qayd etdi. Biri — to'lov provayderi tasdiqlamasdan "to'lov muvaffaqiyatli" sahifasining ko'rsatilishi. To'g'ri yondashuv: to'lov holatini faqat provayderning server-server callback'i yoki API so'rovi orqali o'zgartirish, success sahifasi esa bazadagi haqiqiy holatni ko'rsatishi kerak. Ikkinchisi — holat tekshirilmasdan amal bajarish. Har bir o'tishda (masalan, "qoralama → yuborilgan") joriy holatni server tomonda tekshiring.
7. Rate limiting
Login, parolni tiklash, OTP yuborish va qidiruv kabi marshrutlarga cheklov qo'ying:
RateLimiter::for('login', function (Request $request) {
return Limit::perMinute(5)->by(
Str::lower($request->input('email')).'|'.$request->ip()
);
});
Marshrutga ->middleware('throttle:login') qo'shing. API marshrutlari uchun ham alohida limit belgilang.
8. Sessiya cookie bayroqlari
config/session.php va .env:
SESSION_SECURE_COOKIE=true
SESSION_HTTP_ONLY=true
SESSION_SAME_SITE=lax
SESSION_ENCRYPT=true
Login'dan keyin $request->session()->regenerate(), chiqishda invalidate() va regenerateToken() chaqirilayotganini tekshiring. Laravel starter kit'lari buni qiladi, lekin maxsus yozilgan login oqimlarida ko'pincha unutiladi.
9. Bog'liqliklar auditi
composer audit
npm audit --omit=dev
Natijada ma'lum zaifligi bor paketlar chiqsa, yangilang. composer.lock repozitoriyda bo'lishi va production'ga composer install --no-dev --optimize-autoloader bilan o'rnatilishi kerak.
10. Imzolangan URL'lar
Email tasdiqlash, fayl yuklab olish yoki obunani bekor qilish havolalarida ID'ni ochiq qoldirmang. URL::temporarySignedRoute('invoice.download', now()->addMinutes(30), [...]) va marshrutda signed middleware ishlating. Shunda havolani o'zgartirib boshqa yozuvga kirib bo'lmaydi.
11. Ma'lumot oshkor bo'lishi
Bizning ekspertizada ikkita topilma aynan shu turdagi edi. Birinchisi — Ziggy orqali brauzerga butun marshrutlar ro'yxati, jumladan admin marshrutlari uzatilishi. config/ziggy.php da only yoki groups bilan faqat kerakli marshrutlarni chiqaring. Ikkinchisi — API javoblarida ortiqcha maydonlar. Modelni to'g'ridan-to'g'ri qaytarish o'rniga API Resource ishlating va $hidden ni tekshiring. Shuningdek X-Powered-By va server versiyasini sarlavhalardan olib tashlang.
12. Fayl yuklash va ochiq kataloglar
- Yuklangan fayllarni
mimes,maxqoidalari bilan tekshiring va iloji bo'lsapublicemas, yopiq diskda saqlang. - Veb-server ildizi faqat
public/bo'lsin..env,storage/logs,.gitbrauzerdan ochilmasligini tekshiring. telescope,horizon,phpinfoyoki debug-panellar production'da yopiq yoki faqat admin uchun bo'lsin.
Yaxshi qoida: har bir bandni "kodda bor" deb emas, "tekshirib ko'rdim" deb belgilang.
Qanday tekshirish kerak
Ro'yxatni bir marta o'qib chiqish yetarli emas. Har bir band uchun aniq tekshiruv qiling: curl -H "X-Forwarded-Host: example.org" bilan parolni tiklash havolasini so'rang, boshqa foydalanuvchi ID'si bilan resursni oching, loginni ketma-ket 10 marta noto'g'ri kiriting. Natijani yozib boring — keyin ekspertizaga javob tayyorlashda aynan shu yozuvlar kerak bo'ladi.
Xulosa
Laravel'da xavfsizlik ko'pincha bitta qator sozlamaga bog'liq. 12 ta bandni ketma-ket ko'rib chiqish ekspertizada chiqadigan odatiy topilmalarning katta qismini oldindan yopadi.
Sipar Laravel loyihalarini shu va boshqa bandlar bo'yicha tekshiradi: Claude AI agenti kod va konfiguratsiyani ko'rib chiqadi, mutaxassis topilmalarni tasdiqlab tuzatadi. Loyihangizni tekshirib ko'rish uchun skanerlash uchun ariza qoldiring.


