Mundarija (30)
- Bu darsda
- 1. Nega bu kerak?
- 2. Shaxsiy ma'lumot nima?
- 2.1 Ta'rif va toifalar
- 2.2 Shaxsiy ma'lumot bilan nima qilinadi
- 3. O'zbekiston: O'RQ-547 "Shaxsga doir ma'lumotlar to'g'risida"
- 3.1 Qonun va uning tahrirlari
- 3.2 Lokalizatsiya: 2026-yil mart o'zgarishi
- 3.3 Dasturchiga tegishli boshqa talablar
- 4. GDPR: Yevropa qoidasi
- 4.1 Qachon sizga tegishli
- 4.2 Asosiy tamoyillar (5-modda)
- 4.3 Qonuniy asos (6-modda)
- 4.4 Subyekt huquqlari va buzilish haqida xabar
- 4.5 Cookie banner haqida bir og'iz
- 5. Ma'lumotlar xaritasi
- 5.1 Katalogdan boshlash
- 5.2 Nom bo'yicha qidiruvning cheklovi
- 5.3 Bazadan tashqaridagi joylar
- 6. Loglardan shaxsiy ma'lumotni yashirish
- 7. Hujumchi nigohi
- 8. Ko'p uchraydigan xatolar
- 9. Mashqlar
- 1-mashq (oson): bo'shliqlarni to'ldiring
- 2-mashq (o'rta): emailni qisman yashirish
- 3-mashq (qiyin): ma'lumotlar xaritasini tekshirish
- 10. Loyiha qadami: docs/MAXFIYLIK.md
- 11. Real ishda
- Xulosa
- Manbalar
Shaxsiy ma'lumotlar qonunchiligi: O'zbekiston qonuni (O'RQ-547) va GDPR dasturchi uchun
Qisqacha: Foydalanuvchining emaili, ismi, IP manzili va hatto vazifa matni — shaxsiy ma'lumot. O'zbekistonda ularni "Shaxsga doir ma'lumotlar to'g'risida"gi qonun (O'RQ-547) tartibga soladi, Yevropadagi foydalanuvchilar uchun — GDPR. 2026-yil mart tahriridan keyin majburiy lokalizatsiya (ma'lumotni faqat O'zbekistondagi serverda saqlash) asosan biometrik, genetik va telekom ma'lumotlariga tegishli. Dasturchining vazifasi — qaysi ma'lumot qayerda, nima uchun va qancha saqlanishini bilish va buni kod bilan ta'minlash. Bu dars yuridik maslahat emas.
Bu darsda
- Shaxsiy ma'lumot nima ekanini va
vazifalar-apida qayerlarda yotganini aniqlaysiz. - O'RQ-547 ning dasturchiga tegishli joylarini va 2026-yil o'zgarishini bilib olasiz.
- GDPR qachon sizga tegishli bo'lishini va asosiy tamoyillarini tushuntira olasiz.
- Ma'lumotlar xaritasini katalogdan yig'ib, uning cheklovini ko'rasiz.
- Loglarga shaxsiy ma'lumot tushmasligi uchun yashirish funksiyasini yozasiz.
- Loyihaga
docs/MAXFIYLIK.mdhujjatini qo'shasiz.
Oldin bilishingiz kerak: Xavfsizlik nima: CIA, tahdid va hujumchi fikrlashi, Ma'lumotlar bazasi xavfsizligi, Analitika: foydalanuvchi xatti-harakatini o'lchash, Sirlarni boshqarish.
Oldingi darslarda bazani tezlashtirdik, bo'limlarga ajratdik, himoyaladik va o'zgarishlarini tashqariga uzatishni ko'rdik. Bu dars — boshqacha. Bu yerda texnik savol emas, majburiyat haqida gaplashamiz: biz saqlayotgan ma'lumot birovniki. Keyingi darsda bu majburiyatni SQL funksiyalari bilan bajaramiz.
1. Nega bu kerak?
Aziz vazifalar-api asosida kichik xizmat ishga tushirdi. Uch oyda 2 000 foydalanuvchi. Bir kuni pochtaga xat keladi:
"Hisobimni o'chirib tashlang. Mening haqimda qanday ma'lumot saqlayotganingizni ham yuboring."
Aziz bazani ochadi va birinchi marta savol beradi: "Men aslida nimalarni saqlayapman?" Email va ism — tushunarli. Lekin kirish jurnalidagi IP manzillar-chi? Vazifa matnidagi "Onamga dori olish — Ibn Sino klinikasi"? AI xususiyati Google'ga yuborgan matnlar-chi? Zaxira nusxalar-chi?
Yana bir savol: server Frankfurtda. Bu qonunga zidmi?
Bu savollarga javob bilmagan jamoa ikki xavf ostida qoladi. Birinchisi — qonuniy: jarima va xizmatni bloklash. Ikkinchisi — ishonch: foydalanuvchi "o'chirildi" deb javob olgan ma'lumoti bir yildan keyin sizib chiqsa, uni qaytarib bo'lmaydi.
O'xshatish: shifokor. U bemor haqida ko'p narsa biladi, lekin bu bilim unga omonat. Shifokor kartani faqat davolash uchun ochadi, kerakli muddat saqlaydi va begonaga bermaydi. Bazangizdagi har qator — shunday karta.
2. Shaxsiy ma'lumot nima?
2.1 Ta'rif va toifalar
Shaxsiy ma'lumot (personal data) — aniq bir odamga tegishli yoki uni aniqlashga imkon beradigan har qanday ma'lumot. O'zbekiston qonunida u "shaxsga doir ma'lumotlar" deb ataladi. Asosiy so'z — aniqlashga imkon beradigan. Ism bo'lmasa ham, IP manzil, telefon raqami yoki qurilma identifikatori odamni topishga yordam bersa — u shaxsiy ma'lumot.
Amalda uchta toifani ajrating:
| Toifa | Misol | Xavf darajasi |
|---|---|---|
| Oddiy | email, ism, telefon, IP | o'rta |
| Maxsus | sog'liq, din, siyosiy qarash, biometrika | yuqori |
| Bilvosita | vazifa matni, izoh, fayl | kutilmaganda yuqori |
Uchinchi qator eng ko'p unutiladi. Ustunning nomi matn — u texnik ko'rinadi. Lekin foydalanuvchi u yerga "Shifokorga borish — tahlil natijasi" deb yozsa, ichida sog'liq haqidagi ma'lumot paydo bo'ladi. Erkin matn kiritiladigan har maydon — potentsial maxsus ma'lumot.
2.2 Shaxsiy ma'lumot bilan nima qilinadi
Qonunlar "ishlov berish" (processing) degan keng tushunchani ishlatadi: yig'ish, saqlash, o'zgartirish, uzatish, o'chirish — hammasi ishlov berish. Ya'ni SELECT ham, log fayliga yozish ham, AI provayderiga yuborish ham qonun ko'zida bir xil og'irlikdagi harakat.
Ma'lumotning hayot sikli quyidagicha:
flowchart LR
A["Yig'ish<br/>rozilik, maqsad"] --> B["Saqlash<br/>qayerda, qancha"]
B --> C["Uzatish<br/>AI, SMS, email"]
B --> D["Subyekt so'rovi<br/>ko'rish, tuzatish"]
C --> E["O'chirish yoki<br/>anonimlashtirish"]
D --> EDiagrammaning har tuguni — dasturchi qaror qabul qiladigan joy. Yig'ishda: bu maydon haqiqatan kerakmi? Saqlashda: qaysi serverda, necha kun? Uzatishda: kimga va foydalanuvchi bundan xabardormi? O'chirishda: zaxira va loglardan ham ketadimi? Shu dars va keyingisi aynan shu to'rt savolga javob beradi.
Tekshirib ko'ring:
sessiyalarjadvalidagiuser_agentustuni (Mozilla/5.0 … Chrome/154) shaxsiy ma'lumotmi?
Javob
Yakka o'zi — odatda yo'q: millionlab odamda bir xil brauzer bor. Lekin u foydalanuvchi_id va ip bilan bitta qatorda turibdi. Birgalikda ular aniq odamni va uning qurilmasini ko'rsatadi. Shuning uchun jadval darajasida user_agent ham shaxsiy ma'lumot sifatida qaraladi va saqlash muddati oladi.
3. O'zbekiston: O'RQ-547 "Shaxsga doir ma'lumotlar to'g'risida"
3.1 Qonun va uning tahrirlari
Qonun 2019-yil 2-iyulda qabul qilingan, raqami — O'RQ-547. Rasmiy matni lex.uz da. Kanon jamoasi sahifani 2026-yil 3-noyabrda ko'rdi: unda o'zgartirishlar ro'yxati bor — 2021-01-15, 2021-04-21, 2023-11-29, 2026-03-27, 2026-07-14 (O'RQ-1158) va 2026-09-12 (O'RQ-1174).
Ro'yxatning o'zi bitta saboq beradi: qonun o'zgarib turadi. 2025-yilda yozilgan maqola yoki eski dars bugun noto'g'ri bo'lishi mumkin. Shuning uchun har prodakshn chiqarishdan oldin lex.uz dagi amaldagi tahrirni ko'rish odat bo'lsin.
Diqqat: Bu dars yuridik maslahat emas. Biz dasturchi ko'zi bilan qonunning texnik oqibatlarini ko'ramiz. Haqiqiy loyihada qaror — yurist bilan.
3.2 Lokalizatsiya: 2026-yil mart o'zgarishi
Qonunning 27¹-moddasi — lokalizatsiya (localization): ma'lumotni O'zbekiston hududidagi serverlarda saqlash talabi. Uzoq vaqt bu moddani shunday tushunishgan: "O'zbekiston fuqarolarining shaxsiy ma'lumoti — faqat mahalliy serverda". Ko'p darslar va maqolalar, jumladan kursimizning eski rejasi ham aynan shunday yozgan.
2026-yil mart o'zgarishi bu moddani toraytirdi: 2026-yil 26-martdagi O'RQ-1125-sonli Qonun bilan yangi tahrir kiritildi (rasmiy e'lon — 27.03.2026). Biz lex.uz dagi joriy matnni 2026-11-03 da o'qib chiqdik; Kun.uz xabari ham shuni aytadi (havolalar «Manbalar» bo'limida). Yangi tahrirga ko'ra:
| Ma'lumot turi | 2026-yil martdan keyin |
|---|---|
| Biometrik ma'lumot | faqat O'zbekistonda (majburiy) |
| Genetik ma'lumot | faqat O'zbekistonda (majburiy) |
| Mahalliy telekom foydalanuvchilari ma'lumoti | faqat O'zbekistonda (majburiy) |
| Qolgan shaxsiy ma'lumotlar | belgilangan shartlar bilan chet elda ham |
"Belgilangan shartlar" — moddaning o'zida sanalgan: subyektning roziligi, teng darajada himoya beradigan davlat, vakolatli organ tasdiqlagan standart shartnoma shartlari yoki korporativ qoidalar, vakolatli organ ro'yxatidagi xalqaro standartlarga muvofiqlik. Bu tafsilotlar ham o'zgarishi mumkin. Shuning uchun xulosa ehtiyotkor: oddiy vazifalar ilovasi uchun chet eldagi server endi avtomatik ravishda qonunbuzarlik emas. Lekin passkey o'rniga yuz yoki barmoq izi tasvirini serverda saqlaydigan ilova uchun talab qat'iy qoladi.
vazifalar-api da biometrik ma'lumot yo'qmi? Ikki faktorli autentifikatsiya va passkeys darsini eslang: passkey'da barmoq izi qurilmadan chiqmaydi. Server faqat ochiq kalit saqlaydi. Demak bizda biometrik ma'lumot yo'q — passkey'ni tanlash bu yerda huquqiy afzallik ham berdi.
3.3 Dasturchiga tegishli boshqa talablar
Kanon lex.uz matnini o'qib, dasturchiga tegishli joylarni jadvalga yig'di; modda raqamlarini biz lex.uz dagi joriy matn bilan solishtirdik (2026-11-03):
| Talab | Modda | Kodda nima |
|---|---|---|
| Rozilik — isbotlanadigan shaklda; maqsad o'zgarsa — yangi rozilik | 18, 21 | ro'yxatdan o'tishda maxfiylik siyosati |
| Subyekt huquqlari: bilish, tuzatish, yo'q qilish | 22, 30, 11, 17, 31 | GET /v1/auth/men, sozlamalar, hisobni o'chirish |
| Maqsad tugasa — yo'q qilish; statistika uchun — anonimlashtirish | 17, 16, 31 | tozalash funksiyalari (keyingi dars) |
| Uchinchi shaxsga uzatishda subyektni xabardor qilish | 23 | AI provayderi haqida siyosatda ochiq yozish |
| Bazani davlat reyestrida ro'yxatdan o'tkazish | 20 | majburiy toifalar bo'lsa — mutaxassis bilan |
Qonunda dasturchiga kerakli muddatlar ham bor. Subyekt so'rovi bo'yicha ma'lumotni tuzatish — 3 kun ichida (11-modda). Ma'lumot berishni rad etsangiz, yozma javob — 10 kun ichida (22-modda). Uchinchi shaxsga uzatilganini subyektga yozma xabar qilish — 3 kun ichida (23-modda). Buzilish (breach) haqida majburiy xabar berishning umumiy talabi esa qonun matnida topilmadi (2026-11-03 holati). GDPR'da bu talab bor — pastda ko'ramiz.
Jadvaldagi to'rtinchi qatorga e'tibor bering. 31-qismning keyingi darslarida vazifalar-api vazifa matnini Google Gemini'ga yuboradi. Bu — uchinchi shaxsga uzatish. Demak AI xususiyati bilan birga maxfiylik siyosatiga bitta abzats qo'shiladi: "AI tugmasini bossangiz, vazifa matni Google'ga yuboriladi". Bundan tashqari bu yangi maqsad — vazifani saqlash va uni AI'ga berish turli narsa. Alohida rozilik kerakmi yoki ogohlantirish yetadimi — bu yuridik savol. Biz uni ochiq qoldiramiz va hujjatda belgilab qo'yamiz.
Tekshirib ko'ring: Aziz serverini Frankfurtga qo'ydi.
vazifalar-apiemail, ism, telefon va vazifa matnini saqlaydi. 2026-yil martdagi tahrirga ko'ra u nimani tekshirishi kerak?
Javob
Birinchidan, bazada biometrik, genetik yoki telekom foydalanuvchi ma'lumoti yo'qligini — ular uchun lokalizatsiya majburiy qoladi. Ikkinchidan, qolgan ma'lumotni chet elda saqlash shartlarini (Vazirlar Mahkamasi tartibi, davlatlar ro'yxati) lex.uz dagi amaldagi matndan. Uchinchidan — bularni yurist tasdiqlashi. "Endi hamma narsa mumkin" degan xulosa ham, "hamma narsa taqiqlangan" degani ham noto'g'ri.
4. GDPR: Yevropa qoidasi
4.1 Qachon sizga tegishli
GDPR (General Data Protection Regulation, 2016/679) — Yevropa Ittifoqining shaxsiy ma'lumotlar reglamenti. Uning 3-moddasi hududdan tashqariga chiqadi: kompaniya qayerda bo'lishidan qat'i nazar, Yevropadagi odamlarga xizmat taklif qilsa yoki ularning xatti-harakatini kuzatsa — GDPR tegishli.
Toshkentdagi startap uchun bu nimani anglatadi? Saytingiz inglizcha bo'lsa, narx yevroda ko'rsatilsa va Yevropadan ro'yxatdan o'tishga ruxsat bersangiz — GDPR deyarli aniq sizga tegishli. Sayt faqat o'zbekcha bo'lsa va yevropaliklarga mo'ljallanmagan bo'lsa — ehtimoli kam. Bu chegarani ham yurist aniqlaydi.
4.2 Asosiy tamoyillar (5-modda)
GDPR'ning yuragi — yettita tamoyil. Dasturchi uchun eng muhim to'rttasi:
- Maqsadni cheklash — ma'lumot faqat aytilgan maqsad uchun ishlatiladi. Ro'yxat uchun olingan emailni reklama tarqatishga ishlatish — buzilish.
- Minimallashtirish (data minimization) — faqat kerakli ma'lumot yig'iladi. Tug'ilgan sana kerak bo'lmasa — formada so'ralmaydi.
- Saqlashni cheklash — ma'lumot maqsad uchun kerakli muddatgacha saqlanadi. "Har ehtimolga qarshi abadiy" — mumkin emas.
- Yaxlitlik va maxfiylik — shifrlash, kirish huquqlari, RLS. Bularni 28-qismda va Ma'lumotlar bazasi xavfsizligi darsida qurganmiz.
4.3 Qonuniy asos (6-modda)
Har ishlov berishga qonuniy asos kerak. Oltitasi bor: rozilik, shartnoma, qonuniy majburiyat, hayotiy manfaat, ommaviy vazifa, qonuniy manfaat. Ko'pchilik "hammasiga rozilik olamiz" deb o'ylaydi. Bu xato: rozilik istalgan vaqtda qaytarib olinadi. Shartnomani bajarish uchun zarur narsaga rozilik so'rash ma'nosiz.
vazifalar-api misolida:
| Ishlov berish | Qonuniy asos |
|---|---|
| Email va parol hash'i | shartnoma — busiz xizmat ishlamaydi |
| Kirish jurnali (IP, 180 kun) | qonuniy manfaat — hisobni o'g'irlikdan himoya |
| AI'ga vazifa matnini yuborish | rozilik — ixtiyoriy xususiyat |
| Marketing xatlari | rozilik — oldindan, alohida katakcha |
4.4 Subyekt huquqlari va buzilish haqida xabar
GDPR foydalanuvchiga — ma'lumot subyektiga — aniq huquqlar beradi:
| Huquq | Modda | API'da |
|---|---|---|
| Ma'lumotini ko'rish | 15 | GET /v1/auth/men + eksport |
| Tuzatish | 16 | profil sozlamalari |
| O'chirish ("unutilish huquqi") | 17 | DELETE /v1/auth/men (keyingi dars) |
| Boshqa xizmatga ko'chirish | 20 | /v1/eksportlar (CSV, JSON) |
To'rtinchi qator qiziq: 29-qismda qurgan eksportimiz (fon vazifasi, CSV va JSON) GDPR'ning ko'chirish huquqini deyarli tayyor bajaradi. Yaxshi arxitektura ko'pincha qonuniy talabni "tekin" beradi.
Buzilish bo'lsa — masalan, baza zaxirasi ochiq bucket'da topilsa — GDPR'ning 33-moddasi nazorat organiga "asossiz kechiktirmasdan va imkon bo'lsa, xabar topgandan keyin 72 soatdan kechiktirmay" xabar berishni talab qiladi. Ikki izoh moddaning o'zida bor. Buzilish odamlarning huquqlariga xavf tug'dirmasligi ehtimoli yuqori bo'lsa — xabar shart emas. 72 soatdan kechiksa — kechikish sababi tushuntiriladi. 72 soat — juda qisqa. Shu vaqtda kimning ma'lumoti, qaysi ustunlar, qancha qator ketganini aytish kerak. Ma'lumotlar xaritasi oldindan tayyor bo'lmasa, bu imkonsiz.
Jarimalar ham jiddiy: eng og'ir buzilishlar uchun 20 million yevrogacha yoki yillik global aylanmaning 4 % igacha (qaysi biri katta bo'lsa) — 83-modda.
4.5 Cookie banner haqida bir og'iz
Ko'p saytlar har qanday cookie uchun banner chiqaradi. Aslida rozilik zarur bo'lmagan cookie'lar uchun kerak: analitika, reklama, kuzatuv. Kirish sessiyasi cookie'si — xizmat uchun zarur, unga banner kerak emas. Aniqlik uchun: cookie qoidasining o'zi GDPR'da emas, Yevropaning boshqa hujjatida — ePrivacy direktivasida (2002/58, 5(3)-modda). Rozilik qanday bo'lishi kerakligi (ixtiyoriy, aniq, qaytarib olinadigan) esa GDPR'dan olinadi. Analitika darsida rozilikni frontendda qanday so'rashni ko'rgansiz. vazifalar-api faqat sessiya cookie'sini qo'yadi — banner shart emas.
Tekshirib ko'ring: Foydalanuvchi AI xususiyatiga rozilikni qaytarib oldi. Kod nima qilishi kerak?
Javob
Kelajakdagi AI so'rovlarini to'xtatishi kerak — masalan, foydalanuvchi bayrog'i tekshiriladi va AI yo'li 403 qaytaradi. Allaqachon provayderga yuborilgan matnni qaytarib olib bo'lmaydi. Shuning uchun AI so'rovi matnini bizda saqlamaslik muhim — kanon logga faqat model nomi va token sonini yozadi. Rozilik qaytarilishi oldingi ishlov berishni noqonuniy qilmaydi, faqat keyingisini to'xtatadi.
5. Ma'lumotlar xaritasi
5.1 Katalogdan boshlash
72 soatlik talabga ham, Azizning xatiga ham javobning asosi bitta — ma'lumotlar xaritasi (data map, data inventory). Bu jadval: qaysi ma'lumot, qaysi jadvalda, kim ko'radi, qancha saqlanadi va qanday o'chadi.
Xaritani qo'lda yozishdan oldin bazaning o'zidan so'raymiz. Postgres arxitekturasi darsidan bilasiz: information_schema — bazaning o'zi haqidagi jadvallar. Shaxsiy ma'lumotga o'xshash ustun nomlarini qidiramiz (biz ishga tushirdik — vazifalar-api ning shu bosqichdagi sxemasi, PostgreSQL 17.6):
SELECT table_name AS jadval, column_name AS ustun
FROM information_schema.columns
WHERE table_schema = 'public'
AND column_name ~ '(email|telefon|^ip$|user_agent|ism)'
ORDER BY 1, 2; jadval | ustun
-----------------------+-------------------------
auth_hodisalar | ip
auth_hodisalar | user_agent
bir_martalik_tokenlar | ip
foydalanuvchilar | email
foydalanuvchilar | email_tasdiqlangan_vaqt
foydalanuvchilar | telefon
foydalanuvchilar | toliq_ism
otp_kodlar | ip
otp_kodlar | telefon
sessiyalar | ip
sessiyalar | user_agent
tashqi_hisoblar | email
(12 rows)O'n ikki ustun, olti jadval. IP manzil to'rt joyda — kutilganidan ko'p. otp_kodlar.telefon — SMS kod bilan kirishdan qolgan nusxa.
5.2 Nom bo'yicha qidiruvning cheklovi
Endi natijani halol o'qiymiz. Ro'yxatda bitta yolg'on topilma bor: email_tasdiqlangan_vaqt — bu vaqt, email emas. Eng xavflisi esa ro'yxatda yo'q narsalar:
vazifalar.matn— erkin matn; "Onamga dori olish" kabi sog'liq ma'lumoti bo'lishi mumkin.vazifa_tarixi— vazifa matnining eski nusxalari (audit uchun).telegram_ulanishlar.chat_id— Telegram foydalanuvchisini aniqlaydi.push_obunalar.endpoint— brauzer qurilmasiga bog'langan manzil.foydalanuvchilar.sozlamalar— JSONB; ichida nima borligini nom aytmaydi.
Saboq: katalog — boshlang'ich nuqta, xaritaning o'zi emas. Xaritani jadvalma-jadval odam ko'zi bilan to'ldiradi. Kanon ham shunday qildi: so'rov ro'yxat berdi, qolganini dasturchi har jadvalni ochib tekshirdi.
5.3 Bazadan tashqaridagi joylar
Xaritaga faqat jadvallar kirmaydi. vazifalar-api da shaxsiy ma'lumot yana qayerga borishi mumkin:
| Joy | Nima tushadi | Nazorat |
|---|---|---|
| Loglar (pino) | so'rov yo'li, xato tafsiloti | redact va matnsiz AI logi |
| Zaxira nusxalar | butun baza | zaxira ham muddat bilan o'chadi |
| S3 (fayllar) | foydalanuvchi yuklagan fayl | yetim fayllar ishchi tomonidan tozalanadi |
| Redis (kesh) | ro'yxatlar nusxasi | TTL |
| AI provayderi | vazifa matni | provayder siyosati; bizda saqlanmaydi |
Eng ko'p sizib chiqadigan joy — loglar. Xato bo'lganda dasturchi "keyin qarayman" deb butun so'rov tanasini logga yozadi. Ichida parol, email va vazifa matni. Loglar esa ko'pincha bazadan uzoqroq saqlanadi va tashqi xizmatga ketadi.
6. Loglardan shaxsiy ma'lumotni yashirish
Pino chuqur darsida pino'ning redact sozlamasini ko'rgandik — u aniq yo'llarni (req.headers.cookie) yashiradi. Lekin yo'l oldindan noma'lum bo'lsa-chi? Masalan, xato obyekti ichida chuqur yotgan email. Kalit nomiga qarab ishlaydigan oddiy yashiruvchini brauzerda yozamiz:
const SHAXSIY = /^(email|telefon|ip|parol|toliqIsm)$/i;
function yashir(qiymat) {
if (Array.isArray(qiymat)) return qiymat.map(yashir);
if (qiymat === null || typeof qiymat !== "object") return qiymat;
const natija = {};
for (const [kalit, q] of Object.entries(qiymat)) {
natija[kalit] = SHAXSIY.test(kalit) ? "[yashirildi]" : yashir(q);
}
return natija;
}
const xato = {
yol: "/v1/auth/kirish",
tana: { email: "aziz@example.com", parol: "Toshkent-2026" },
foydalanuvchi: { id: 1, toliqIsm: "Aziz Karimov" },
ip: "203.0.113.7",
};
console.log(JSON.stringify(yashir(xato), null, 2));Konsolda:
{
"yol": "/v1/auth/kirish",
"tana": {
"email": "[yashirildi]",
"parol": "[yashirildi]"
},
"foydalanuvchi": {
"id": 1,
"toliqIsm": "[yashirildi]"
},
"ip": "[yashirildi]"
}Funksiya rekursiv: obyekt ichidagi obyektga ham kiradi, massivni ham aylanib chiqadi. id qoldi — u o'zicha odamni aniqlamaydi va xatoni tekshirishda kerak.
Bu yondashuvning ham cheklovi bor. xabar: "aziz@example.com topilmadi" kabi matn ichidagi email kalit nomi bilan ushlanmaydi. Shuning uchun asosiy qoida — logga keraksiz narsani umuman yozmaslik. Kanon AI so'rovlari uchun aynan shunday qiladi: logda model nomi, token soni va vaqt bor, vazifa matni yo'q. Bu qatorni 31-qismning AI darslarida ko'rasiz.
7. Hujumchi nigohi
Shaxsiy ma'lumotni o'g'irlash uchun bazani buzish shart emas. Hujumchi ko'pincha "yon eshik"dan kiradi:
- Eski zaxira. Ochiq qoldirilgan bucket'da uch yillik
pg_dumpfayli. Bazadan o'chirilgan hamma hisob unda bor. Himoya: zaxiraning ham muddati va shifrlanishi. - Log xizmati. Xato loglari tashqi monitoring xizmatiga ketadi va u yerda parol bilan so'rov tanasi yotibdi. Himoya:
redact, matnsiz log, yashiruvchi. - "Ma'lumotlarimni yuboring" so'rovi. Hujumchi boshqa odam nomidan xat yozadi va javobda uning ma'lumotini oladi. Himoya: subyekt so'rovi faqat tizimga kirgan hisobdan, qayta tasdiq bilan (
GET /v1/auth/men— sessiya bilan). - Hisobni o'chirish yo'li. O'g'irlangan sessiya bilan hisobni o'chirib, izlarni yo'q qilish. Himoya: joriy parol bilan qayta tasdiq — keyingi darsda kodda ko'ramiz.
Har punkt bitta saboq beradi: shaxsiy ma'lumot himoyasi — faqat baza emas, butun tizim.
8. Ko'p uchraydigan xatolar
| Noto'g'ri tasavvur | Haqiqat |
|---|---|
| "Bizda maxsus ma'lumot yo'q" | Erkin matn maydonlari sog'liq, din haqida ham bo'lishi mumkin |
| "O'zbekiston qonuni — hamma ma'lumot faqat mahalliy serverda" | 2026-yil martdan majburiy talab asosan biometrik, genetik, telekom uchun |
| "Hammasiga rozilik olamiz — muammo yo'q" | Rozilik qaytarib olinadi; xizmat uchun zarur narsaga shartnoma asosi to'g'ri |
| "O'chirdik — tamom" | Zaxira, log, kesh, S3, AI provayderidagi nusxalar ham bor |
| "Ma'lumotlar xaritasini katalog beradi" | Katalog nom bo'yicha topadi; erkin matn va JSONB qo'lda tekshiriladi |
| "Qonunni bir marta o'qidik" | Tahrirlar yiliga bir necha marta chiqadi; har chiqarishdan oldin lex.uz |
9. Mashqlar
Mashqlar kurs/mashqlar/31/11-qonunchilik/ da. 2- va 3-mashq yechimlari Node 24.21.0 da tekshirilgan (biz ishga tushirdik).
1-mashq (oson): bo'shliqlarni to'ldiring
- O'zbekistonning shaxsiy ma'lumotlar haqidagi qonuni raqami — O'RQ-
- Lokalizatsiya talabi joylashgan modda —
- GDPR bo'yicha buzilish haqida nazorat organiga xabar muddati, soatda —
- Faqat kerakli ma'lumotni yig'ish tamoyili — ma'lumotni
- GDPR'ning 17-moddasidagi huquq — unutilish
Yechim
- 547 — "Shaxsga doir ma'lumotlar to'g'risida", 2019-07-02.
- 27¹ — 2026-yil mart tahriridan keyin majburiy qismi biometrik, genetik va telekom ma'lumotiga tegishli.
- 72 — 33-modda; shuning uchun xarita oldindan tayyor bo'lishi kerak.
- minimallashtirish — 5-modda tamoyillaridan biri.
- huquqi — "unutilish huquqi" (right to erasure).
2-mashq (o'rta): emailni qisman yashirish
Qo'llab-quvvatlash xodimi foydalanuvchini aniqlashi kerak, lekin to'liq emailni ko'rmasligi kerak. qismanYashir(email) funksiyasini yozing: nomning birinchi harfi qoladi, qolgani * bilan (ko'pi bilan 5 ta yulduz); domen qoladi. Noto'g'ri qiymat — "[noma'lum]". Ishora: indexOf, slice, "*".repeat(n) (Matn ichida qidirish).
Yechim
function qismanYashir(email) {
const at = typeof email === "string" ? email.indexOf("@") : -1;
if (at < 1) return "[noma'lum]";
const nom = email.slice(0, at);
const yulduz = "*".repeat(Math.min(nom.length - 1, 5));
return nom[0] + yulduz + email.slice(at);
}
const emaillar = [
"aziz@example.com",
"a@b.uz",
"gulnora.saidova@mail.uz",
"xato",
null,
];
for (const e of emaillar) console.log(qismanYashir(e));Konsolda:
a***@example.com
a@b.uz
g*****@mail.uz
[noma'lum]
[noma'lum]Yulduzlar sonini 5 bilan cheklash — qo'shimcha himoya: aks holda yulduzlar soni nomning uzunligini oshkor qiladi. at < 1 ikki holatni ushlaydi: @ yo'q (-1) va @ birinchi belgi (0).
3-mashq (qiyin): ma'lumotlar xaritasini tekshirish
Ma'lumotlar xaritasi massiv ko'rinishida: har element — { jadval, ustun, shaxsiy, muddat } (muddat — kunlarda yoki null). xaritaTekshir(xarita) funksiyasini yozing. U ikki ro'yxat qaytarsin: muddatsiz — shaxsiy, lekin saqlash muddati yozilmagan ustunlar (jadval.ustun shaklida), jadvallar — har jadvalda nechta shaxsiy ustun bor (obyekt). Ishora: filter (filter), reduce (HOF metodlari).
Yechim
function xaritaTekshir(xarita) {
const shaxsiy = xarita.filter((x) => x.shaxsiy);
const muddatsiz = shaxsiy
.filter((x) => x.muddat === null)
.map((x) => `${x.jadval}.${x.ustun}`);
const jadvallar = shaxsiy.reduce((acc, x) => {
acc[x.jadval] = (acc[x.jadval] ?? 0) + 1;
return acc;
}, {});
return { muddatsiz, jadvallar };
}
const q = (jadval, ustun, shaxsiy, muddat) =>
({ jadval, ustun, shaxsiy, muddat });
const xarita = [
q("foydalanuvchilar", "email", true, null),
q("foydalanuvchilar", "telefon", true, null),
q("foydalanuvchilar", "rol", false, null),
q("auth_hodisalar", "ip", true, 180),
q("sessiyalar", "user_agent", true, null),
q("vazifalar", "matn", true, 30),
];
console.log(xaritaTekshir(xarita));Konsolda:
{
muddatsiz: [
'foydalanuvchilar.email',
'foydalanuvchilar.telefon',
'sessiyalar.user_agent'
],
jadvallar: {
foydalanuvchilar: 2,
auth_hodisalar: 1,
sessiyalar: 1,
vazifalar: 1
}
}Yordamchi q funksiyasi faqat qatorlarni qisqa yozish uchun. rol shaxsiy emas — u ikkala ro'yxatga ham tushmadi. foydalanuvchilar.email uchun null — xato emas: email hisob yashaguncha kerak, muddati "hisob o'chguncha". Lekin buni xaritada aniq yozish kerak — masalan, muddat: "hisob". sessiyalar.user_agent esa haqiqiy bo'shliq: kanonda sessiya muddati tugagandan 7 kun keyin o'chadi — xaritaga shuni yozamiz. Tekshiruvchi funksiya "unutilgan" qatorlarni ko'rsatadi, qarorni esa odam qabul qiladi.
10. Loyiha qadami: docs/MAXFIYLIK.md
Bu darsda vazifalar-api ga kod emas, hujjat qo'shiladi: docs/MAXFIYLIK.md. U yuridik matn emas — dasturchining texnik xaritasi: qonunning qaysi talabi kodning qaysi joyida bajariladi. Kanon uni shunday tuzdi:
# Shaxsiy ma'lumotlar: vazifalar-api nimani,
# qayerda, qancha saqlaydi
Bu hujjat — dasturchining texnik xaritasi,
yuridik maslahat EMAS. Har chiqarishdan oldin
lex.uz dagi amaldagi tahrirni tekshiring.
## Manbalar (ko'rilgan sana — 2026-11-03)
## Qonunning dasturchiga tegishli joylari
## Ma'lumotlar xaritasi va saqlash muddatlari
## GDPR asoslari"Qonunning dasturchiga tegishli joylari" bo'limiga «O'zbekiston» bo'limidagi ikki jadvalni (lokalizatsiya va boshqa talablar) yozing. Manbalarga lex.uz havolasi, ikkinchi manba va ko'rilgan sana kiradi — sanasiz manba bir yildan keyin hech narsa demaydi.
Ma'lumotlar xaritasi — hujjatning asosiy qismi. Kanon versiyasi:
| Ma'lumot | Saqlash | Qanday o'chadi |
|---|---|---|
email, ism, parol hash (foydalanuvchilar) |
hisob yashaguncha | hisob o'chirilsa — anonimlashtirish |
| vazifalar, izohlar, teglar | yumshoq o'chirishdan keyin 30 kun | haqiqiy DELETE (CASCADE) |
| sessiyalar, tokenlar, OTP | muddati + 7 kun | tozalash funksiyasi |
| kirish hodisalari (IP, user-agent) | 180 kun | tozalash funksiyasi |
| vazifa hodisalari (statistika) | 13 oy | bo'lim DROP |
| AI so'rov matni | bizda saqlanmaydi | logda faqat model, token, vaqt |
Uchinchi ustundagi har qator keyingi darsda SQL funksiyasiga aylanadi. Hozircha bu — va'da. Hujjatning oxirida GDPR bo'limi: qonuniy asos, minimallashtirish, unutilish va ko'chirish huquqlari (eksport bor), 72 soat va cookie (bizda faqat zarur sessiya cookie'si).
Kanon hujjatda bitta savolni ochiq qoldirdi: AI xususiyati uchun alohida rozilik kerakmi yoki ogohlantirish yetadimi. Siz ham hujjatingizda shunday savollarni yashirmang — "Ochiq savollar" bo'limiga yozing. Yurist bilan gaplashganda aynan shu ro'yxat kerak bo'ladi.
Docker'siz takrorlash: «Ma'lumotlar xaritasi» bo'limidagi katalog so'rovini o'z bazangizda bajaring, natijani jadvalma-jadval tekshiring va xaritaga katalog topmagan ustunlarni qo'shing. Hali commit qilmang — hujjat keyingi darsdagi tozalash funksiyalari bilan bitta commit'da ketadi.
11. Real ishda
- Qayerda uchraydi: har ro'yxatdan o'tish formasida (maxfiylik siyosati havolasi), har "hisobni o'chirish" tugmasida, har yangi tashqi xizmat (AI, SMS, analitika) ulanishida.
- Jamoada: yangi xususiyat dizayni bosqichida "bu qanday shaxsiy ma'lumot yig'adi va qayerga uzatadi?" savoli beriladi. Katta kompaniyalarda — DPIA (ma'lumot himoyasiga ta'sirni baholash) hujjati.
- Intervyu savollari: "Shaxsiy ma'lumot nima, misollar?", "GDPR qachon O'zbekistondagi kompaniyaga tegishli?", "Unutilish huquqini zaxira nusxalarda qanday bajarasiz?", "Logga shaxsiy ma'lumot tushmasligini qanday ta'minlaysiz?"
- Vositalar: pino
redact, Sentry'dabeforeSendbilan tozalash, bazada ustun izohlari (COMMENT ON COLUMN … IS 'shaxsiy') — xaritani sxemaning o'zida saqlash usuli.
Xulosa
- Shaxsiy ma'lumot — odamni aniqlashga imkon beradigan har narsa; erkin matn maydonlari ham.
- O'RQ-547 tez-tez o'zgaradi: 2026-yil martdan majburiy lokalizatsiya asosan biometrik, genetik va telekom ma'lumotiga tegishli. Har chiqarishdan oldin lex.uz ni tekshiring.
- GDPR Yevropadagi odamlarga xizmat ko'rsatsangiz tegishli: minimallashtirish, qonuniy asos, subyekt huquqlari, 72 soat.
- Ma'lumotlar xaritasi — hamma talabning asosi; katalog uni boshlaydi, odam tugatadi.
- Loglar — eng ko'p sizib chiqadigan joy: keraksiz narsani yozmang, kerakli joyda yashiring.
- Bu dars yuridik maslahat emas — qarorni yurist bilan qabul qiling.
Keyingi dars: Ma'lumot saqlash muddati, arxivlash va anonimlashtirish — xaritadagi muddatlarni SQL funksiyalariga aylantiramiz va DELETE /v1/auth/men bilan hisobni o'chirishni quramiz.
Manbalar
- O'zbekiston Respublikasining "Shaxsga doir ma'lumotlar to'g'risida"gi Qonuni, O'RQ-547 (lex.uz, ko'rilgan sana 2026-11-03): https://lex.uz/docs/4396419
- 2026-yil mart o'zgarishi — O'RQ-1125-sonli Qonun (26.03.2026), 27¹-modda yangi tahriri lex.uz dagi qonun matnida (yuqoridagi havola).
- 2026-yil mart o'zgarishi — Kun.uz: https://kun.uz/en/news/2026/03/28/uzbekistan-amends-personal-data-law-to-facilitate-global-payment-systems
- GDPR, Regulation (EU) 2016/679 — rasmiy matn (EUR-Lex): https://eur-lex.europa.eu/eli/reg/2016/679/oj (EUR-Lex avtomatik so'rovlarni to'sadi; 3, 5 va 33-moddalar matni 2026-11-03 da qabul qilingan nusxa bo'yicha tekshirildi: https://www.legislation.gov.uk/eur/2016/679/article/33/adopted)
- ePrivacy direktivasi 2002/58/EC (cookie qoidasi, 5(3)-modda): https://eur-lex.europa.eu/eli/dir/2002/58/oj
- Kanon o'lchovi (IlmHamroh, 2026-11):
vazifalar-apisxemasi vadocs/MAXFIYLIK.md. SQL bloki va mashq yechimlari — biz ishga tushirdik (2026-11-03, PostgreSQL 17.6, Node 24.21.0).
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!