Telegram Bot Güvenliği En İyi Uygulamaları
Bot token'ı, herkesin her yerden kullanabileceği, ikinci bir doğrulama adımı ya da giriş uyarısı olmayan bir şifredir. Çoğu Telegram bot olayı buradan başlar. İşte genellikle ters giden sıraya göre neyi kilit altına almanız gerektiği.
1. Token'ı canlı bir kimlik bilgisi olarak ele alın
Bot token'ınıza sahip olan kişi botu tamamen kontrol eder. Gelen mesajları okuyabilir, sizin adınıza mesaj gönderebilir ve webhook'unuzu değiştirerek kendi sunucunuzun güncellemeleri almasını engelleyebilir. Burada şifre sorma ekranı ya da cihaz onayı gibi bir engel yoktur.
Token'lar nerede sızar
- Bir repository'e commit edilir. En yaygın yol budur ve herkese açık repolar, sizin olmayan botlar tarafından sürekli taranır.
- Bir destek sohbetine veya bir issue tracker'a yapıştırılır. Bir talebe girdiği anda bir yerlerdeki arama indeksine de girer.
- Bir mobil veya ön yüz derlemesine sabit kodlanır. Bir istemci cihaza gönderilen her şey herkese açıktır.
- Loglarda bırakılır. Tam API URL'sini loglarsanız, token URL'nin içindedir.
Bunun yerine ne yapmalı
- Token'ı kaynak kodda değil, bir ortam değişkeninde veya bir secrets manager'da tutun.
- İlk commit'ten önce, sonra değil,
.envdosyasını.gitignore'a ekleyin. - Log çıktısında token'ı gizleyin.
- Geliştirme ve production için ayrı token'lar kullanın, böylece sızan bir test token'ı gerçek kullanıcılara dokunamaz.
Bir token sızarsa, iptal edin
BotFather'ı açın, /revoke komutunu çalıştırın ve botu seçin. Eski token anında çalışmayı durdurur ve size yeni bir tane verilir. Token'ı yenilemek birkaç dakikalık kesintiye mal olur. Onu bırakmak ise botun kendisine mal olur. Git geçmişini yeniden yazmak işe yaramaz, çünkü token zaten kopyalanmıştır.
2. Webhook'u sıkılaştırın
Botunuz bir webhook kullanıyorsa, bu URL internet üzerinde açık bir uç noktadır. Onu bulan herkes, gerçek Telegram trafiğiyle birebir aynı görünen sahte güncellemeler gönderebilir.
- Bir secret token belirleyin.
setWebhookmetodu birsecret_tokenparametresi kabul eder. Telegram daha sonra bunu her istekteX-Telegram-Bot-Api-Secret-Tokenbaşlığında geri gönderir. Eşleşmeyen her şeyi reddedin. - HTTPS'i geçerli bir sertifikayla kullanın. Telegram bunu zorunlu kılar, ayrıca içeriğin aktarım sırasında okunabilir olmasını engeller.
- Tahmin edilemeyen bir yol kullanın. URL'deki rastgele bir segment tek başına gerçek bir güvenlik önlemi değildir, ama sizi fırsatçı taramaların dışına çıkarır.
- Aldığınızı sınırlayın.
allowed_updatesparametresi yalnızca işlediğiniz güncelleme türlerine abone olmanızı sağlar. Daha az yüzey, daha az ayrıştırma. - Hızlı yanıt verin. İsteği onaylayın, ardından işi asenkron olarak yapın. Yavaş webhook handler'ları, gerçekleşmeyi bekleyen bir hizmet reddi saldırısıdır.
3. Bir güncellemenin içeriğine asla güvenmeyin
Bir güncellemenin içindeki her şey bir kullanıcı tarafından yazılmıştır. Görünen ad, mesaj metni, bir buton basmasındaki callback verisi. Bunların hepsi saldırgan tarafından kontrol edilebilen girdidir.
- Callback verisini sunucu tarafında doğrulayın.
order_id=123taşıyan bir buton,order_id=124ile tekrar oynatılabilir. Basan kullanıcının kaydın sahibi olduğunu kontrol edin. - Kullanıcı metnini yansıtmadan önce escape edin. Mesajları HTML veya Markdown modunda gönderiyor ve bir görünen adı doğrudan yapıştırıyorsanız, özenle hazırlanmış bir isim biçimlendirmenizi bozabilir veya bir bağlantı enjekte edebilir.
- Veritabanı sorgularını parametreleştirin. Sohbet girdisinin bir sorgu dizesine ulaşması, bir web formuyla aynı enjeksiyon riskini taşır.
- Kabul ettiğiniz boyutları sınırlayın. Herhangi bir şeyi işlemeden önce metin uzunluğu ve dosya boyutu için sınırlar belirleyin.
4. Yönetici komutlarını sıkı tutun
Neredeyse her bot bir yönetici komutu edinir. Broadcast, iade, kullanıcı dışa aktarma. Çalışan bir botun bir olaya dönüştüğü nokta burasıdır.
- Sunucuda, konfigürasyonda tutulan bir kullanıcı ID allowlist'i kontrol edin. Yönetici durumunu asla bir kullanıcı adından çıkarmayın, çünkü kullanıcı adı değiştirilip yeniden kullanılabilir.
- Gizlemeyin, doğrulayın. Belgelenmemiş bir komut, birisi onu denediği anda keşfedilir. Belirsizlik bir kontrol değildir.
- Yıkıcı eylemleri ikinci bir adımla onaylatın ve ne olacağını onay metnine dahil edin.
- Yönetici eylemlerini kullanıcı ID'si ve zaman damgasıyla loglayın, böylece sonradan "o broadcast'i kim gönderdi" sorusunu yanıtlayabilirsiniz.
5. Gruplarda gizlilik modunu açın
Varsayılan olarak bir gruba eklenen bot, yalnızca komut olan mesajları, kendi mesajlarına gelen yanıtları veya kendisinden bahsedilen mesajları alır. Bu varsayılana gizlilik modu denir ve iyi bir nedenle vardır.
BotFather'da /setprivacy ile bunu kapatabilirsiniz, böylece bot gruptaki her mesajı görür. Bunu yalnızca bir özellik gerçekten gerektiriyorsa yapın. Kapatıldığında, sunucunuz başkalarının konuşmalarını depolamaya başlar ve artık bu sorumluluk sizindir.
6. Kendinizi ve kullanıcılarınızı hız sınırlayın
Telegram kendi sınırlarını uygular ve bunlara çarpmak sizi kısıtlanmış veya geçici olarak engellenmiş hale getirir. Telegram'ın genel önerisi, farklı sohbetler genelinde saniyede kabaca 30 mesaj ve aynı gruba dakikada yaklaşık 20 mesajdır. Bunları hedef değil, rahatça altında kalınması gereken tavan değerler olarak değerlendirin.
- Giden mesajları sıkı bir döngüde göndermek yerine kuyruğa alın.
- 429 yanıtı geldiğinde hemen yeniden denemek yerine retry-after değerine uyun.
- Kullanıcı başına da kısıtlayın. Tek bir kişinin bir komutu spamlaması, maliyetlerinizi artırmasına veya kotanızı tüketmesine izin vermemeli.
- Maliyetli her şeye bir bekleme süresi koyun, örneğin ücretli bir yapay zeka modeline yapılan çağrılar veya bir görsel üretim adımı gibi.
7. Daha az kullanıcı verisi toplayın
En güvenli kayıt, hiç saklamadığınız kayıttır. Botlar varsayılan olarak sohbet ID'leri, isimler, telefon numaraları ve mesaj içeriği biriktirir ve bunların çoğu hiç kullanılmaz.
- Sohbet ID'sini ve gerçekten ihtiyacınız olanı saklayın. Gerisini atlayın.
- Somut bir gerekçeniz ve bir saklama süreniz olmadıkça tam mesaj gövdelerini loglamayın.
- Bir saklama süresi belirleyin ve zamanlamaya göre silin.
- Hassas alanları depoda şifreleyin ve veritabanını kimlerin sorgulayabileceğini kısıtlayın.
- Silme taleplerini destekleyin. GDPR ve benzeri kanunlar kapsamında bir kullanıcı, verisinin kaldırılmasını isteyebilir ve bunu yapacak bir yolunuz olması gerekir.
- Ne topladığınızı botun bağlantı verebileceği bir gizlilik politikasında belirtin.
Not: telefon numaraları size yalnızca kullanıcı bir iletişim bilgisi paylaşma butonuna dokunursa ulaşır. İhtiyacınız olmayan birini istemek hem bir dönüşüm maliyeti hem de bir sorumluluktur.
8. Web App ve Login Widget verisini doğrulayın
Botunuz bir Telegram Web App açıyorsa veya bir web sitesinde Login Widget kullanıyorsanız, kullanıcı verisi bir hash ile gelir. Tek bir alana bile güvenmeden önce bu hash'i sunucunuzda, bot token'ınızı kullanarak doğrulayın. Bu kontrolü atlamak, isteği düzenleyerek herkesin herhangi bir kullanıcı olduğunu iddia edebileceği anlamına gelir.
9. Sıradan şeyleri de gözden kaçırmayın
- Bağımlılıkları güncelleyin. Gerçek güvenlik ihlallerinin çoğu Telegram üzerinden değil, bir kütüphane üzerinden gelir.
- Kimlerin deploy edebileceğini ve production sırlarını okuyabileceğini kısıtlayın.
- Alışılmadık örüntüleri izleyin: tek bir komutta ani artış, tek bir kullanıcıdan sıkı bir döngüde gelen mesajlar, secret token kontrolünü geçemeyen istekler.
- Kötü gün için bir planınız olsun. Token'ı iptal edin, webhook'u durdurun, yedekten geri yükleyin. İhtiyacınız olmadan önce yazıya dökün.
Kontrol listesi
- Token, git'te değil ortam değişkenlerinde yaşar ve loglarda gizlenir.
- BotFather'da
/revoke'u nasıl çalıştıracağınızı biliyorsunuz. - Webhook, HTTPS ve her istekte doğruladığınız bir secret token kullanıyor.
allowed_updatesyalnızca işlediğiniz türlere ayarlı.- Callback verisi, gönderildiği gibi güvenilmek yerine sunucu tarafında yetkilendiriliyor.
- Kullanıcı metni, biçimlendirilmiş bir mesajda geri yansıtılmadan önce escape ediliyor.
- Yönetici komutları bir ID allowlist'i kontrol ediyor ve loglanıyor.
- Bir özellik gerçekten gerektirmedikçe gizlilik modu açık.
- Giden mesajlar kuyruğa alınıyor ve 429 yanıtlarına saygı gösteriliyor.
- Minimumu saklıyorsunuz, zamanlamaya göre siliyorsunuz ve bir silme talebini karşılayabiliyorsunuz.
- Web App ve Login Widget payload'ları hash ile doğrulanıyor.
Yanlış gidebilecek kısımları atlayın
TeleMinute ile token'ınız sunucu tarafında saklanır, webhook sizin için yönetilir ve açıkta bırakacağınız kendi bir sunucunuz olmaz. Siz konuşmayı yazarsınız, altyapıyı biz işletiriz.
Bugün Kurmaya BaşlayınOkumaya devam edin
- BotFather rehberi, token'ı nasıl iptal edip yenileyeceğiniz dahil
- Telegram bot en iyi uygulamaları, daha geniş kontrol listesi
- Telegram bot UX en iyi uygulamaları, tasarım tarafı için
Sık sorulan sorular
Telegram bot token'ım sızarsa ne olur?
Kim elinde tutarsa botu tamamen kontrol eder. Gelen mesajları okuyabilir, sizin adınıza mesaj gönderebilir ve webhook'unuzu değiştirerek kendi sunucunuzun güncelleme almasını durdurabilir. Burada bir şifre sorma ekranı yoktur.
Bir Telegram bot token'ını nasıl iptal ederim?
BotFather'ı açın, revoke komutunu gönderin ve botu seçin. Eski token anında çalışmayı durdurur ve size yeni bir tane verilir. Git geçmişini yeniden yazmak yardımcı olmaz, çünkü sızan bir token dakikalar içinde taranır.
Botum bir gruptaki her mesajı görür mü?
Yalnızca gizlilik modunu kapatırsanız. Varsayılan olarak bir gruptaki bot, komutları, kendi mesajlarına gelen yanıtları ve doğrudan bahsedilmeleri alır. Gizlilik modunu kapatmak, sunucunuzun başkalarının konuşmalarını depolaması anlamına gelir.
Webhook'umda bir secret token'a ihtiyacım var mı?
Evet. Bir tane olmadan, webhook URL'nizi bulan herkes gerçek Telegram trafiğiyle birebir aynı görünen sahte güncellemeler gönderebilir. Webhook'u kaydederken secret'ı belirleyin ve başlığı eşleşmeyen istekleri reddedin.