ZaminDocs

Maxfiylik va xavfsizlik

Zamin β€” maxfiylikka qurilgan messenger. Foydalanuvchilar botingizga ishonib yozadi; bu sahifa ularning ishonchini saqlash uchun nima qilish kerakligini aytadi.

Bot qanday ma'lumot oladi

OladiHech qachon olmaydi
Psevdonim id, ism, familiya, ochiq username, ilova tili (User)Haqiqiy hisob id'si, telefon raqam, email
Foydalanuvchi aynan shu botga yozgan xabarlar, fayllar va tahrirlarBoshqa chatlar, kontaktlar ro'yxati, bot a'zo bo'lmagan guruh va kanallar
Guruhda: buyruqlar, @eslatishlar, o'z xabariga javoblar va xizmat voqealari (privacy mode); barcha xabarlar β€” faqat guruh egasi ruxsat bersaGuruhga qo'shilishidan oldingi tarix, boshqa botlarning xabarlari, reaksiyalar
Inline tugma bosilishlariProfil rasmi, bio, tug'ilgan kun, onlayn holat
Start, bloklash va qayta boshlash (my_chat_member)Joylashuv, Davra, qurilmalar
Telefon raqam yoki joylashuv β€” faqat foydalanuvchi tugmani bosib, tasdiqlab yuborgandaFoydalanuvchi o'chirgan xabarlar haqida signal

Bot foydalanuvchilarni qidira, ro'yxatini ola yoki boshqa foydalanuvchilar haqida so'ray olmaydi. Shaxsiy chatda bot faqat o'zini boshlagan odamlarga yoza oladi; guruh va kanalga esa faqat o'zi a'zo bo'lganlariga.

Botga xos psevdonim id'lar

Har bir foydalanuvchi har bir bot uchun alohida raqam bilan ko'rinadi. Bu raqam serverda maxfiy kalit bilan hisoblanadi: undan haqiqiy hisobni yoki boshqa botdagi id'ni topib bo'lmaydi. Ikki bot egasi o'z ma'lumotlarini birlashtirib, odamlarni solishtira olmaydi.

  • Bitta bot uchun id doimiy β€” ma'lumotlar bazasida kalit sifatida ishlatish mumkin.
  • Bot tokenini almashtirish id'larni o'zgartirmaydi.
  • Id'ni boshqa xizmatlarga "foydalanuvchi identifikatori" sifatida oshkor qilmang.

Bot chatlari uchidan-uchiga shifrlanmagan

Oddiy Zamin chatlari uchidan-uchiga shifrlangan. Bot chatlari esa yo'q: xabarlar serverda server kaliti bilan shifrlangan holda saqlanadi, lekin Zamin serveri va siz (bot egasi) ularni o'qiysiz. Ilova har bir bot chatida buni ko'rsatadi. Shuning uchun:

  • Foydalanuvchidan parol, karta raqami, PIN yoki bir martalik kod so'ramang.
  • Bot nima uchun qanday ma'lumot to'plashini tavsifda (/setdescription) yoki maxfiylik siyosatingizda ochiq yozing.

Guruhlarda ham shunday: guruh uchidan-uchiga shifrlangan bo'lib qoladi, lekin botga yetib borgan har bir xabarni (buyruq, @eslatish, javob yoki "barcha xabarlar") Zamin serveri va bot egasi o'qiy oladi. Shuning uchun "Barcha xabarlarni o'qish" huquqini faqat haqiqatan kerak bo'lsa so'rang va guruh xabarlarini saqlamang. Botga boradigan nusxa atayin qisqartirilgan: unda iqtibos matni va muallifi, havola ko'rinishlari va forward manbasi yo'q, kontaktlar esa botga umuman shifrlanmaydi (bot nusxasi). Batafsil.

Tokenni himoyalash

Token bilan istalgan kishi botingiz nomidan yozishi, foydalanuvchilar xabarlarini o'qishi va webhookni o'z serveriga burishi mumkin.

  • Tokenni muhit o'zgaruvchisida yoki maxfiy fayl/secret manager'da saqlang, kodga yozmang.
  • .env fayllarni .gitignore'ga qo'shing. Tokenni ommaviy repozitoriy, skrinshot yoki chatga qo'ymang.
  • Tokenni brauzer yoki mobil ilova kodiga qo'ymang β€” Bot API'ni faqat serveringizdan chaqiring.
  • Log yozganda so'rov URL'larini to'liq yozmang: tokenni yashiring (masalan, bot<redacted>).
  • Fayl yuklab olish havolasi (/file/bot<TOKEN>/…) ham tokenni o'z ichiga oladi β€” uni foydalanuvchiga yubormang.
Python
import os
import re

TOKEN = os.environ["ZAMIN_BOT_TOKEN"]          # kodda emas, muhitda


def safe_url(url: str) -> str:
    """Log uchun: URL ichidagi tokenni yashiradi."""
    return re.sub(r"/bot[^/]+/", "/bot<redacted>/", url)

/revoke β€” token oshkor bo'lsa

Token oshkor bo'lganini sezsangiz, darhol @ZaminBot'da /revoke qiling. Eski token shu zahoti ishlamay qoladi, webhook o'chiriladi, navbatdagi yangilanishlar tashlanadi va ochiq long poll yopiladi β€” eski token egasi bilan bog'liq hamma narsa uziladi. Keyin yangi tokenni serveringizga qo'ying va kerak bo'lsa setWebhook'ni qayta chaqiring.

Webhook sarlavhasini tekshirish

Webhook manzilingiz sir emas deb hisoblang. setWebhook'da uzun tasodifiy secret_token bering va har bir so'rovda X-Zamin-Bot-Api-Secret-Token sarlavhasini doimiy vaqtli solishtirish bilan tekshiring:

Python
import hmac
import os

from flask import abort, request

SECRET = os.environ["ZAMIN_WEBHOOK_SECRET"]   # python3 -c "import secrets; print(secrets.token_urlsafe(32))"


def check_secret():
    got = request.headers.get("X-Zamin-Bot-Api-Secret-Token", "")
    if not hmac.compare_digest(got.encode(), SECRET.encode()):
        abort(403)

Qo'shimcha: webhook yo'liga ham taxmin qilib bo'lmaydigan qism qo'shishingiz mumkin, lekin asosiy himoya β€” maxfiy sarlavha.

Kam ma'lumot saqlang

  • Faqat botning ishi uchun kerakli ma'lumotni saqlang. Xabarlar arxivini "har ehtimolga qarshi" yig'mang.
  • Foydalanuvchi botni bloklasa (my_chat_member β†’ kicked), uning ma'lumotlarini o'chiring yoki muddat belgilab tozalang.
  • Telefon raqam va joylashuvni ish tugagach o'chiring.
  • Saqlanadigan ma'lumotni shifrlang, serveringizga kirishni cheklang, zaxira nusxalarni ham himoyalang.
  • Foydalanuvchiga o'z ma'lumotini o'chirish imkonini bering (masalan, /delete_my_data buyrug'i).

Kiruvchi ma'lumotga ishonmang

  • callback_data va matnlarni doim tekshiring: foydalanuvchi eski xabardagi tugmani bosishi yoki kutilmagan matn yuborishi mumkin.
  • Foydalanuvchi yuborgan fayllarni ochishdan oldin turini va hajmini tekshiring; mime_type ko'pincha application/octet-stream bo'ladi.
  • Foydalanuvchi matnini SQL so'rovlariga yoki shell buyruqlariga to'g'ridan-to'g'ri qo'ymang.