PHP xavfsizlik asoslari

PHP serverda ishlaydi va bazaga, fayllarga hamda foydalanuvchi ma’lumotiga tegadi. Bitta e’tiborsizlik butun bazani ochib qo’yishi mumkin. Bu darsda eng ko’p uchraydigan hujumlar va ularning aniq yechimlari.

Asosiy qoida

1. SQL injection

Eng xavfli va eng keng tarqalgan zaiflik:

PHP

Yechimtayyorlangan so’rov:

// ✅ Qiymat SQL matniga qo'shilmaydi
$s = $pdo->prepare("SELECT * FROM foydalanuvchilar WHERE login = ?");
$s->execute([$login]);

Ustun yoki jadval nomi kerak bo’lsa — ruxsat etilgan ro’yxat:

PHP

2. XSS

Hujumchi sahifaga o’z JavaScript kodini kiritadi:

PHP

Atribut va havolada alohida ehtiyot:

PHP

3. CSRF

Yechim — har formada maxfiy token:

PHP

Formada:

<form method="post">
  <input type="hidden" name="csrf" value="<?= tokenYasa() ?>">
  <!-- qolgan maydonlar -->
</form>

Qabul qilishda:

if (!tokenTekshir($_POST["csrf"] ?? null)) {
    http_response_code(403);
    exit("So'rov rad etildi");
}

4. Parol saqlash

PHP

Vaqti kelganda hashni yangilash:

if (password_verify($parol, $hash)) {
    if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
        $yangi = password_hash($parol, PASSWORD_DEFAULT);
        // bazada yangilash
    }
    // kirish muvaffaqiyatli
}

5. Sessiya xavfsizligi

<?php
// session_start() dan OLDIN
ini_set("session.cookie_httponly", "1");    // JavaScript o'qimasin
ini_set("session.cookie_secure", "1");      // faqat HTTPS
ini_set("session.cookie_samesite", "Lax");  // CSRF himoyasi
ini_set("session.use_strict_mode", "1");    // o'ylab topilgan id rad etilsin

session_start();

// Kirgandan keyin DARHOL
session_regenerate_id(true);

Sessiya darsida bu batafsil ko’rilgan.

6. Fayl yuklash

7. Fayl yo’li

PHP

8. Xato xabarlari

PHP

Ishlab chiqarish serverida:

ini_set("display_errors", "0");
ini_set("log_errors", "1");
error_reporting(E_ALL);

9. Sozlama fayllari

10. HTTP sarlavhalari

<?php
header("X-Content-Type-Options: nosniff");
header("X-Frame-Options: DENY");
header("Referrer-Policy: strict-origin-when-cross-origin");
header("Content-Security-Policy: default-src 'self'");
Sarlavha Nimadan himoya qiladi
nosniff Brauzer fayl turini “taxmin” qilishidan
X-Frame-Options: DENY Clickjacking (saytni iframe’ga solish)
Referrer-Policy Manzildagi maxfiy ma’lumot sizib chiqishidan
Content-Security-Policy XSS (qayerdan skript yuklash mumkinligi)

Va albatta — butun sayt HTTPS da.

Tekshiruv ro’yxati

  • Har SQL so’rovi prepare + execute bilanmi?
  • Har chiqishda htmlspecialchars bormi?
  • Har POST formada CSRF token bormi?
  • Parollar password_hash bilanmi?
  • Sessiya cookie sozlamalari qo’yilganmi?
  • Fayl yuklashda tur va nom tekshiriladimi?
  • display_errors ishlab chiqarishda o’chirilganmi?
  • .env va vendor/ .gitignore dami?
  • Sayt HTTPS dami?
  • composer audit toza chiqadimi?

Amaliy mashq

  1. SQL injection misolini yozib, nega ishlashini tushuntiring;
  2. htmlspecialchars ni olib tashlab, <script> yuboring;
  3. CSRF token yasovchi va tekshiruvchi funksiya yozing;
  4. password_hash va password_verify ni sinang;
  5. hash_equals va === farqini tushuntiring;
  6. xato xabarini ikki rejimda ko’rsating.

Qisqacha xulosa

  • Foydalanuvchidan kelgan hamma narsa ishonchsiz; server qayta tekshiradi.
  • SQL injection → tayyorlangan so’rov; ustun nomi → ruxsat etilgan ro’yxat.
  • XSS → chiqishda htmlspecialchars($m, ENT_QUOTES, "UTF-8").
  • CSRF → har formada token + hash_equals.
  • Parol → password_hash; md5/sha1 yaroqsiz.
  • Fayl yuklashda: yangi nom, haqiqiy tur, PHP bajarilmaydigan papka.
  • Xato matni foydalanuvchiga ko’rsatilmaydi — jurnalga yoziladi.
  • Maxfiy fayllar public/ dan tashqarida.

Keyingi darsda shablon va MVC — kodni toza tashkil qilish.

Bu dars foydali bo'ldimi?

marta ko'rildi