Fayl yuklash zaifliklaridan saboq: "yaxshi yetadi" deyishning xavfi
Bir Hafta Ichida Ko'ringan Muammo
Uch xil hosting provider bir hafta ichida bir xil xavfsizlik muammosini e'lon qildi. Bu muammo — fayl yuklashda minimal tekshiruv qilish edi.
Bu yangi masala emas. Bu xatolar doimiy ravishda takrorlanib turadi. Kompaniyalar esa millionlab dollar yo'qotadi — tozalash xarajatlari, mijozlar ishonchini yo'qotish, sud ishlaridan.
Minimal Tekshiruv Deganda Nima Tushuniladi?
Dasturchilar fayl yuklash funksiyasini yozayotganda, ko'pincha eng oson yo'lni tanlaydi. Fayl kengaytmasini tekshiradi, MIME turini tekshiradi, hajmini tekshiradi.
Bular o'zi yomon tekshiruvlar emas. Lekin ular yetarli emas.
Minimal tekshiruv — bu faylni to'liq tekshirmasdan xavfsiz deb o'ylash. Bu xatolarni qilish juda oson, chunki sinovda hamma narsa yaxshi ishlaydi.
Muammo shundaki, hakerlar bu zaif joylarni juda yaxshi biladi. Ular tekshiruvlardan o'tib ketadigan fayllar yaratishadi.
Fayl Yuklash Xavfsizlik Teshigi Qanday Ko'rinishda Bo'ladi
O'tgan haftada topilgan xavfsizlik teshiklari bir xil tuzilishga ega edi:
Kengaytma tekshiruvi zaif — ikki tomonlama kengaytma qo'yish mumkin (masalan: malicious.php.jpg)
Fayl ichidagi ma'lumot tekshirilmaydi — rasm ko'rinishidagi fayl aslida kod bo'lishi mumkin
Fayllar noto'g'ri joyda saqlanadi — veb-serverdan bevosita ochish mumkin bo'lgan papkada
Ishga tushishga ruxsat bor — server yuklangan fayllarni bajarishga to'sqinlik qilmaydi
Natijada, haker parol kiritmasdan serverni to'liq boshqarish imkoniyatiga ega bo'ladi.
Nima Uchun Dasturchilar Shu Xatoni Takrorlaydi
Vaqt yetishmaydi — tez yetkazib berish talab qilinadi. To'liq tekshiruv ortiqcha ish kabi ko'rinadi.
Sinovda yaxshi ko'rinadi — toza fayllar bilan sinov o'tkaziladi. Ishlab chiqarishda esa hamma narsa buziladi.
Xavflardan boxabar emas — har bir dasturchi xavfsizlik mutaxassisi emas. Hakerlar fayllarni qanday manipulatsiya qilishini bilmasligi mumkin.
Boshqa joyda himoyalangan deb o'ylash — jamoa WAF yoki server sozlash yetarli deb o'ylaydi. Bu xavfli fikr.
To'g'ri Fayl Yuklash Xavfsizligi Qanday Bo'ladi
Xavfsizlik uchun bir necha qatlam kerak:
1. Fayl Turini Kengaytma Bilan Emas, Ichki Mazmun Bilan Tekshing
# Noto'g'ri usul - foydalanuvchiga ishonadi
if file.filename.endswith('.jpg'):
save_file(file)
# To'g'ri usul - haqiqiy tarkibni tekshiradi
import magic
mime_type = magic.from_buffer(file.read(1024), mime=True)
file.seek(0)
if mime_type in ALLOWED_MIME_TYPES:
save_file(file)
python-magic yoki libmagic kabi kutubxonalar fayl nomi emas, ichidagi ma'lumotni tekshiradi.
2. Yangi Fayl Nomi Yaratish
Yuklangan fayl nomini hech qachon to'g'ridan-to'g'ri ishlatmang:
import uuid
import os
# Barcha kengaytmalarni olib tashlang, yangi nom yarating
secure_filename = f"{uuid.uuid4().hex}.{allowed_extension}"
filepath = os.path.join(UPLOAD_DIR, secure_filename)
3. Fayllarni Web Root Tashqarisida Saqlash
Muhim ilovalar uchun bu majburiy. Agar fayllarni ko'rsatish kerak bo'lsa, maxsus skript orqali, ruxsat tekshirib ko'rsating.
4. Serverda Bajarilyaptgan Fayllarni Bloklash
# Apache - yuklangan fayllarni ishga tushirmaslik
<Directory "/var/www/uploads">
<FilesMatch "\.(php|phtml|phar|py|pl|exe)$">
Order Deny,Allow
Deny from all
</FilesMatch>
</Directory>
5. Qo'shimcha Tekshiruv Qatlamlari
- Fayl imzosini tekshirish — fayl boshida maxsus baytlar borligini tekshiring
- Rasmni tozalash — imagemagick orqali qayta ishlash, ichidagi kodni olib tashlash
- Hajm cheklovi — fayl hajmi emas, rasm o'lchamlari ham muhim
- Tezlik cheklovi — bir daqiqada nechta fayl yuklash mumkinligini belgilang
Bu Muammolarning Odamlarga Ta'siri
Texnik masaladan tashqari, bu zaifliklar real odamlarga ta'sir qiladi:
- Mijozlar — ularning ma'lumotlari o'g'irlanadi
- Bizneslar — jarimalar va sud xarajatlari
- Dasturchilar — ismlariga dog' tushadi
- Foydalanuvchilar — xizmatga ishonchni yo'qotadi
Xavfsizlik qo'shimcha funksiya emas — mas'uliyat.
Hosting Providerlar Nima Qilishi Kerak
Hosting platformasi yoki fayl yuklash funksiyasini yaratayotgan bo'lsangiz:
- Mavjud kodni tekshiring — minimal tekshiruvlarni qidiring
- To'liq tarkib tekshiruvini qo'llang
- Yuklangan fayllarni veb-serverdan tashqarida saqlang
- WAF qoidalarini qo'shing — qo'shimcha himoya sifatida
- Xavfsizlik holatlariga tayyorgarlik ko'ring — muammo bo'lganda nima qilishni biling
- Dasturchilarni o'qiting — xavfsizlik bo'yicha bilim bering
Xulosa
O'tgan haftada topilgan xavfsizlik teshiklari murakkab hujumlar yoki yangi kashfiyotlar tufayli emas. Ular oddiy yo'l — minimal tekshiruv — tufayli yuzaga keldi.
Bu yaxshi yangilik, chunki tuzatish oson.
Xavfsizlik sekin yoki og'riqli bo'lishi shart emas. Faqat "ey, ishlayapti" deyishdan to'liq tekshiruvga o'tish kerak.
Sizning ilovangiz albatta sinovdan o'tkaziladi. Muhimi — sinovda muvaffaqiyatli o'tish.