Her Telegram mini app için temel güvenlik gereklilikleri
Mini app geliştirme hızlı olabilir, ancak zayıf mimaride güvenlik borcu hızla büyür.
Oyun ürünlerinde güvenlik; kimlik doğrulama, tazelik kontrolü ve sunucu otoritesinin birlikte çalışmasıdır.
Net bir güvenlik temeli, önlenebilir olayları azaltır ve destek yükünü yönetilebilir tutar.
Kimliğe bağlı işlemler
Hassas işlemler oyuncu kimliğini istek gövdelerinde veya sorgu parametrelerinde iletilen kullanıcı tarafından sağlanan kimliklerden değil, doğrulanmış Telegram bağlamından türetmelidir. Bir istemci eylem isteği gönderdiğinde sunucu, oyuncu tanımlayıcısını Telegram'ın sağladığı kriptografik olarak imzalanmış initData yükünden çıkarmalı — ve içindeki herhangi bir iddiaya güvenmeden önce o imzayı bot token'ı kullanarak doğrulamalıdır. Bunun yerine oyuncu kimliğini istemci tarafından gönderilen bir alandan okuyan herhangi bir sistem, HTTP isteklerinin nasıl çalıştığını anlayan herhangi bir kullanıcı tarafından önemsiz biçimde taklit edilebilir.
Bu yaklaşım en temel kimlik sahteciliği vektörlerini engeller. Sunucu o alandan hiçbir zaman kimlik okumuyorsa, kötü niyetli bir aktör istek gövde alanını değiştirerek başka bir oyuncu olduğunu iddia edemez. Finansal yollar — para çekme istekleri, bakiye okumaları, referans kredisi — hepsi yalnızca sunucunun çıkardığı kimlik üzerinde çalışmalıdır. Herhangi bir finansal işlem istemci tarafından iddia edilen bir kimliği kabul ettiği anda, tüm finansal katman kimlik ikamesi saldırılarına karşı savunmasız hale gelir.
Bu kalıbın korumalı tüm rotalarda tutarlı biçimde uygulanması için kimlik doğrulama ara yazılım düzeyinde uygulayın; bireysel rota işleyicilerinin kimliği doğru biçimde çıkarmayı hatırlamasına güvenmek yerine. initData'yı doğrulayan ve doğrulanmış kullanıcı nesnesini istek bağlamına ekleyen bir ara yazılım, her downstream işleyici için kimlik çıkarmayı otomatik hale getirir.
Tekrar oynatma ve zamanlama koruması
Değiştirilebilir işlemler için zaman damgası pencereleri, nonce kontrolleri ve idempotency anahtarları kullanın. Zaman damgası penceresi, auth_date'i yapılandırılmış bir eşikten — genellikle 300 ila 600 saniye — daha eski olan istekleri reddeder. Bu, bir oturumdan yakalanan geçerli initData yükünün saatler veya günler sonra aynı uç noktaya karşı tekrar oynatılamamasını sağlar. Bu pencere olmadan, çalınan bir kimlik doğrulama yükü sonsuza kadar istismar edilebilir kalır.
Nonce kontrolleri, her isteğin yalnızca bir kez kullanılabilecek sunucu tarafından kaydedilen benzersiz bir tanımlayıcı taşımasını zorunlu kılarak ikinci bir katman ekler. Sunucu belirli bir nonce ile isteği işlediğinde onu kullanılmış olarak kaydeder. Aynı nonce'u taşıyan sonraki istekler, zaman damgasının hâlâ geçerli olup olmadığından bağımsız olarak reddedilir. Bu, bir saldırganın geçerli zaman damgası penceresi içinde bir isteği yakalayıp pencere dolmadan birden fazla kez göndermeye çalıştığı spesifik duruma karşı koruma sağlar.
Idempotency anahtarları üçüncü katmandır; tam olarak bir kez tamamlanması gereken değiştirilebilir işlemler için tasarlanmıştır — ödül kredileri, yükseltme satın alımları, para çekme gönderimleri. İstemci her eylem girişimi için benzersiz bir anahtar üretir ve bunu istekle birlikte gönderir. Sunucu sonucu anahtara karşı kaydeder. Aynı anahtar tekrar gelirse sunucu işlemi yeniden yürütmeden kaydedilen sonucu döndürür.
Varsayılan olarak güvenli kapalı
Doğrulama başarısız olduğunda işlemler kısmen devam etmek yerine güvenli şekilde reddedilmelidir. Açık hata davranışı — bir doğrulama hatasının yakalandığı, günlüğe kaydedildiği ve ardından işlemin yine de devam ettiği — tespit ve onarımı maliyetli olan sessiz tutarsızlıklar yaratır. En tehlikeli açık hata vakaları, hataları görünür şekilde günlüğe kaydetmeyenler veya doğrulama hatasının zamanla geliştirme ekiplerinin önceliğini düşürdüğü kritik olmayan bir uyarı olarak ele alındığı vakalardır.
Kapalı hata, herhangi bir gerekli doğrulama adımı onaylanamadığında işlemin istemciye açık bir hata döndürdüğü ve sunucu tarafında sonuçsal hiçbir eylem almadığı anlamına gelir. initData doğrulaması başarısız olursa bir kimlik doğrulama hatası döndürün. Nonce kontrolü başarısız olursa tekrar oynatma reddi döndürün. Idempotency anahtar araması veri katmanı hatası nedeniyle başarısız olursa, yineleme koruması olmadan devam etmek yerine yeniden denenebilir bir hizmet hatası döndürün. Bu yanıtların her biri, meşru bir istemci tarafından normal yeniden deneme mantığı aracılığıyla kurtarılabilir; hiçbiri yanlış durum üretmez.
Güvenli kapalıyı yalnızca dış kimlik doğrulama sınırında değil, her doğrulama katmanında bağımsız olarak uygulayın. Kimlik doğrulamayı geçen ancak dahili hız sınırı kontrolünde başarısız olan bir istek hâlâ reddedilmelidir. Her katmanda güvenli kapalı davranışı oluşturmak, uygulamanın zaman içinde nasıl geliştiğinden bağımsız olarak tek bir atlama noktasının yanlış sonuca giden bir yol oluşturmamasını sağlar.
Pratik özet
Güvenli mini uygulamalar oyuncu kimliğini yalnızca doğrulanmış Telegram bağlamından türetir, zaman damgası pencereleri ve nonce'larla tekrar oynatmaya karşı koruma sağlar, tam olarak bir kez tamamlanması gereken işlemler için idempotency anahtarları kullanır ve herhangi bir doğrulama adımı başarısız olduğunda güvenli biçimde reddeder. Her katman belirli bir saldırı yüzeyini ele alır ve birlikte amaçlanan davranış ile istismar edilebilir davranış arasındaki boşluğu mümkün olduğunca küçültür.