Bir web API'sını güvenli hale getirmek için en iyi uygulamalar nelerdir?


15

Mobil uygulamamızın sunucumuz ve veritabanımızla etkileşime girmesi için bir web hizmeti API'sı oluşturmam gerekiyor (ASP.Net MVC 4'te, ancak bu pek alakalı değil). Çoğu işlemin kullanıcıların hizmetimize kaydolmasını gerektirmediğinden, yalnızca uygulamamızın kullanıcılarına erişimi kısıtlamak istiyoruz.

Başka bir yerden yapılan çağrıların (örneğin tüm verilerimizi isteyen veya resmi olmayan bir uygulama oluşturan biri) reddedilmesini sağlamak için yöntemler nelerdir?

İlk fikrim, cihazın sunucudan rastgele oluşturulmuş ve olduğu gibi gönderilen bir belirteç istemesi. Diğer tüm yöntemler, istek başlıklarının tuzlanmış belirtecin md5 karması olacak özel bir başlık içerdiğini kontrol edecektir. Sunucu, jetonu ve tuzu bilir ve karmayı hesaplayabilir ve gönderilen ile karşılaştırır. Ek olarak, belirteç sınırlı bir ömür olarak ve cihaz her saat başı bir tane almalıdır.

Uygulanması oldukça kolay görünüyor ve muhtemelen% 100 kanıt olmasa da, bu iyi bir fikir gibi görünüyor. Ne düşünüyorsun?

Yanıtlar:


15

Uygulamayı bırakır kaldırmaz tersine mühendislik uygulanabilir. Bu, aynı uygulama (aynı ikili dosyalar, aynı ayarlar) tüm kullanıcılarınıza dağıtılırsa% 100 korunmak için yapabileceğiniz hiçbir şey olmadığı anlamına gelir.

Uygulamayı her kullanıcı için özelleştirebiliyorsanız, başka bir uygulamanın API'nızı kullanmasını yasaklamama şansınız vardır, ancak en azından bu uygulamayı API'ya yapabileceği istek sayısıyla sınırlandırın.

Aşağıdaki şemayı düşünün:

  1. İstemci bağlanır ve benzersiz tanımlayıcısını gönderir (kullanıcı tarafından bir tanımlayıcı).
  2. Sunucu, ortak anahtarla şifrelenmiş bir sorun göndererek yanıt verir. Bu ortak anahtar, daha önce gönderilen benzersiz tanımlayıcı ile ilişkilendirilir.
  3. İstemci, özel bir anahtar kullanarak verilerin şifresini çözerek sorunu çözer ve şifresi çözülmüş sırrı düz olarak sunucuya geri gönderir.
  4. Sunucu, gönderilen sırrın orijinal olarak oluşturulan gizliliğe karşılık geldiğini doğrular.

Uygulamanızı hackleyecek ve özel anahtarı başarıyla alacak geliştirici, API'nizi kendi uygulamasından kullanabilir, ancak sunucunuz için kendisi olarak tanımlayıcı olacaktır.

Aynı kullanıcı API'nıza günde 10.000 istekte bulunabilirse ve ortalama olarak etkin bir kullanıcı günde 2000 istekte bulunursa, bu geliştiricinin uygulamasını kendisi kullanabileceği ve belki de arkadaşlarına verebileceği anlamına gelir, ancak mesela binlerce kişiye satamazdı, çünkü sadece sabahları sadece birkaç dakika çalışacaktı.

Bu yardımcı olsa da,% 100 kanıt da değildir. Bilgisayar korsanı, kendi uygulaması cihaza yüklendiğinde özel anahtarı uygulamanızdan çıkarmanın bir yolunu bulursa ne olur?


Sorunuza cevap vermeyen ancak yine de yararlı olabilecek yan not: Bir API'yı birincil ürününüz için bir araç olarak düşünmeyin (mobil uygulama). Bunu birinci sınıf bir ürünün kendisi, ödenebilecek bir ürün olarak düşünün . Aynı model Amazon ve Google tarafından yıllarca kullanılmaktadır, Microsoft tarafından Azure vb. İle aktif olarak kullanılmaya başlanmıştır.

API'yi, yeni parlak mobil uygulamalarınız için köleliğe indirgenmiş ikincil bir araç olarak değil, gerçek ürün, kullanıcının gördüğü herhangi bir uygulama ile aynı seviyede, API'yi nasıl koruyacağınız hakkında daha az düşünmeye başlarsanız diğer uygulamaların kullanımı ve API'nın kendisinden para kazanılması hakkında daha fazla bilgi . Bu tür API, müşterisi olan uygulamalarınız veya herkes tarafından serbestçe geliştirilen diğer uygulamalar tarafından kullanılabilir. Bunun birkaç faydası vardır:

  • O sadece kullanılacak böylece bir API yapma senin uygulamaları zor ve pahalıdır. Bu kez ve para daha kullanışlı bir şey için kullanılabilir.

  • API'nizi herkese açmak hem sizin hem de dünya için büyük bir fayda sağlayabilir. Harika bir mimar ve harika bir geliştirici olduğunuzu düşünün, bu yüzden şaşırtıcı derecede harika bir API oluşturdunuz, ancak görsel tasarımcı becerileriniz emiliyor ve etkileşim tasarımı vb. Hakkında hiçbir şey anlamıyorsunuz. API'nizi gizlerseniz, insanların bileceği şey, kullanılamaz ve çirkin bir mobil uygulama oluşturmuş olmanızdır. API'niz herkese açıksa, diğer geliştiriciler kalitesinden etkilenecek ve bunun için harika uygulamalar yazacak ve size çok para kazandıracaktır.

  • Başkalarının API'larınızı nasıl kullanabileceğini asla hayal edemezsiniz. Kinect ile olan buydu. Başlangıçta, Microsoft oyunlar için Kinect'i yarattı. Microsoft API'yi halka açtığında, birkaç yıl sonra bilimsel uygulamalar, sağlık sektörü vb. Tarafından kullanılacağını hiç düşünmemişlerdir.


Çok ilginç bir cevap. Muhtemelen API'yi nasıl herkese açık hale getirebileceğimizi düşünmemiz gerekir. Ayrıca referans olarak, ters mühendislik ve demontajın yasa dışı olduğu Fransa'daki hedef pazar, bu yüzden bununla çok meşgul olmalıyız.
Antoine

2
@Antoine: Revere mühendisliği, lisans yasakladığı anda herhangi bir ülkede yasa dışı olacaktır. Ancak yasadışı olması, uygulamanızın kimsenin mühendisliğini gözden geçirmeyeceği anlamına gelmez.
Arseni Mourzenko
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.