Bu örnekte bunun farklı yönleri vardır. Açıkça başka bir yerde ele alındığını düşünmediğim birkaç noktaya değineceğim.
Transit sırrı koruma
Dikkat edilmesi gereken ilk şey, dropbox API'sına uygulama kimlik doğrulama mekanizmasını kullanarak erişmenin anahtarınızı ve sırrınızı iletmenizi gerektirmesidir. Bağlantı HTTPS'dir, yani TLS sertifikasını bilmeden trafiği kesemezsiniz. Bu, bir kişinin mobil cihazdan sunucuya seyahatlerinde paketleri yakalamasını ve okumasını önlemektir. Normal kullanıcılar için trafiklerinin gizliliğini sağlamanın gerçekten iyi bir yoludur.
İyi olmayan şey, kötü niyetli bir kişinin uygulamayı indirmesini ve trafiği denetlemesini engellemektir. Bir mobil cihaza giren ve çıkan tüm trafik için ortadaki bir proxy'yi kullanmak gerçekten kolaydır. Bu durumda Dropbox API'sının doğası gereği uygulama anahtarını ve sırrını çıkarmak için kodun sökülmesi veya tersine mühendislik gerektirmez.
Sunucudan aldığınız TLS sertifikasının beklediğiniz sertifika olup olmadığını kontrol etmek için sabitleme yapabilirsiniz . Bu, istemciye bir kontrol ekler ve trafiği durdurmayı zorlaştırır. Bu, uçuştaki trafiği incelemeyi zorlaştırır, ancak sabitleme kontrolü istemcide gerçekleşir, bu nedenle sabitleme testini devre dışı bırakmak yine de mümkün olabilir. Gerçi zorlaştırıyor.
Dinlenmeden sırrı korumak
İlk adım olarak, koruma gibi bir şey kullanmak, herhangi bir sırın nerede tutulduğunu daha az belirgin hale getirmeye yardımcı olacaktır. NDK'yı, anahtarı ve sırrı saklamak ve doğrudan istekleri göndermek için de kullanabilirsiniz; bu, bilgileri ayıklamak için uygun becerilere sahip kişilerin sayısını büyük ölçüde azaltacaktır. Daha fazla gizleme, değerleri herhangi bir süre boyunca doğrudan bellekte saklamama ile elde edilebilir, bunları başka bir cevap tarafından önerildiği gibi kullanmadan hemen önce şifreleyebilir ve şifresini çözebilirsiniz.
Daha gelişmiş seçenekler
Şimdi sırrını uygulamanızın herhangi bir yerine koyma konusunda paranoyaksanız ve daha kapsamlı çözümlere yatırım yapmak için zamanınız ve paranız varsa, kimlik bilgilerinizi sunucularınızda depolamayı düşünebilirsiniz (herhangi birine sahip olduğunuzu varsayarak). Bu, sunucunuz aracılığıyla iletişim kurması gerekeceğinden API'ya yapılan tüm çağrıların gecikmesini artıracak ve veri akışının artması nedeniyle hizmetinizi yürütme maliyetlerini artırabilir.
Daha sonra, koruntuklarından emin olmak için sunucularınızla en iyi nasıl iletişim kuracağınıza karar vermelisiniz. Dahili API'nizde aynı sorunların tekrar ortaya çıkmasını önlemek için bu önemlidir. Verebileceğim en iyi kural, ortadaki adam tehdidi nedeniyle doğrudan bir sır vermemek. Bunun yerine, sırrınızı kullanarak trafiği imzalayabilir ve sunucunuza gelen tüm isteklerin bütünlüğünü doğrulayabilirsiniz. Bunu yapmanın standart bir yolu, bir sır üzerine yazılan mesajın bir HMAC'sini hesaplamaktır. Bu alanda da faaliyet gösteren bir güvenlik ürünü olan bir şirkette çalışıyorum, bu yüzden bu tür şeyler beni ilgilendiriyor. Aslında, işte meslektaşlarımdan birçoğunun üzerinden geçen bir blog makalesi.
Ne kadar yapmalıyım?
Bunun gibi herhangi bir güvenlik tavsiyesi ile, birisinin girmesi için ne kadar zor yapmak istediğinize dair bir maliyet / fayda kararı vermeniz gerekir. Milyonlarca müşteriyi koruyan bir banka iseniz bütçeniz, boş zaman. Birinin güvenliğinizi kırmasını önlemek neredeyse imkansızdır, ancak pratikte az sayıda insanın tüm çan ve ıslıklara ihtiyacı vardır ve bazı temel önlemlerle uzun bir yol elde edebilirsiniz.