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
| Oladi | Hech 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 tahrirlar | Boshqa 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 bersa | Guruhga qo'shilishidan oldingi tarix, boshqa botlarning xabarlari, reaksiyalar |
| Inline tugma bosilishlari | Profil 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 yuborganda | Foydalanuvchi 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.
.envfayllarni.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.
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:
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_databuyrug'i).
Kiruvchi ma'lumotga ishonmang
callback_datava matnlarni doim tekshiring: foydalanuvchi eski xabardagi tugmani bosishi yoki kutilmagan matn yuborishi mumkin.- Foydalanuvchi yuborgan fayllarni ochishdan oldin turini va hajmini tekshiring;
mime_typeko'pinchaapplication/octet-streambo'ladi. - Foydalanuvchi matnini SQL so'rovlariga yoki shell buyruqlariga to'g'ridan-to'g'ri qo'ymang.