1. Kirish
PHP va MySQL — veb-dasturlar uchun eng ko‘p qo‘llaniladigan texnologiyalar. Ammo noto‘g‘ri yozilgan kodlar orqali ularni buzish juda oson. Ushbu maqolada xavfli kodlar, xujum usullari va ularning oldini olish yo‘llari ko‘rib chiqiladi.
2. Eng Ko‘p Uchraydigan Xavfsizlik Xatolari
🔸 a) SQL Injection (So‘rovga suqilib kirish)
Xavfli kod:
php CopyEdit $id = $_GET['id']; $query = "SELECT * FROM users WHERE id = $id";Nima bo‘ladi?
http CopyEdit ?id=1 OR 1=1Bu barcha foydalanuvchilarni chiqarib yuboradi.
Himoya usuli:
php CopyEdit $stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id"); $stmt->execute(['id' => $_GET['id']]); ✅ PDO yoki MySQLi + tayyorlangan so‘rovlar (prepared statements) ishlating.🔸 b) XSS (Cross-site Scripting)
Xavfli kod:
php CopyEdit echo $_GET['name']; Foydalanuvchi quyidagicha havola yuboradi:html CopyEdit <script>alert('hacked!')</script>Himoya:
php CopyEdit echo htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');🔸 c) CSRF (Cross-Site Request Forgery)
Foydalanuvchi sahifani ochib, sizning sessiyangiz orqali zararli amal bajaradi.
Himoya:
- Har bir POST so‘rovga token joylash.
$_SESSIONbilan tokenni tekshirish.
3. MySQL Ma’lumotlar Bazasi Xavfsizligini Kuchaytirish
🔹 Foydalanuvchi Huquqlarini Cheklash
sql CopyEdit GRANT SELECT, INSERT ON mydb.* TO 'user'@'localhost'; Hech qachonroot foydalanuvchisi orqali kod yozmang.🔹 Parollarni saqlash
Xato:
php CopyEdit $password = $_POST['password'];To‘g‘ri:
php CopyEdit $hash = password_hash($_POST['password'], PASSWORD_DEFAULT);Va tekshirish:
php CopyEdit if (password_verify($input_password, $hash)) { // muvaffaqiyat }4. Fayllarni Yuklash Xavfsizligi
🔸 Xavfli kod:
php CopyEdit move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);🔸 Himoya:
- Faqat ruxsat etilgan fayl turlariga ruxsat bering:
- Fayl nomini o‘zgartiring:
5. Session va Cookie Xavfsizligi
🔹 Session hijacking oldini olish:
php CopyEdit ini_set('session.cookie_httponly', 1); session_start(); session_regenerate_id(true);🔹 Cookie sozlamalari:
php CopyEdit setcookie("auth", $token, [ 'expires' => time() + 3600, 'secure' => true, 'httponly' => true, 'samesite' => 'Strict' ]);6. Qo‘shimcha Himoya Choralari
- HTTPS ni majburan yoqing.
- Fayl va katalogga to‘g‘ri huquqlar bering (
chmod 755,644). .envfayllarni.htaccessorqali yopib qo‘ying:
7. Xulosa
PHP va MySQL bilan ishlaganda xavfsizlik — bu tanlov emas, majburiyat. Har bir foydalanuvchi kiritayotgan ma’lumotni ishonchsiz deb qabul qiling. Kodlaringizni himoya qilish orqali nafaqat foydalanuvchilaringiz, balki o‘zingizni ham himoya qilasiz.