Merhaba arkadaşlar,
Bir web servimiz var. Codeigniter ile birlikte Rest Api dahil edildi. Klasik olarak amaç Mobil Uygulamanın web servisimiz ile iletişim halinde olabilmesi.
Fakat merak ettiğim bir şey var. Güvenliği tam olarak nasıl sağlayabileceğiz?
Örneğin Mobil Uygulamadan Rest Apimize bağlanabilmek için.
POST : USER&KEY
HTTP-HEADER : API-KEY
Şeklinde 2 parametre alıyoruz. Bunlar tek başına yeterli mi?
Şöyle bir örnek vermek istiyorum.
2 web sitesi arasında veri alışverişi yapılınca;
site1.com'dan site2.com'a veri gönderilince gelen verinin site1.com'dan geldiğini öğrenebiliyoruz. Sadece site1.com için işlem yapılsın gibi bir güvenlik önlemi alabiliyoruz.
Mobil tarafında bu nasıl olacak? Nasıl olmalıdır.
Tamam mobil uygulama rest apiye bağlanmak için key kullanması gerekiyor ama.
O Keyler başkasının eline geçerse oda demek ki rahatlıkla kullanabilecek.
Biraz yardımcı olabilir misiniz? veya fikir verebilir misiniz.
Teşekkür ederim.
IOS & Android ve Web Tabanlı Rest API Güvenliği Hakkında
6
●872
- 15-08-2018, 21:24:41Hocam açıkçası mobil uygulamanın rest apiye bağlanmak için sadece 2 key kullanacak olması ne kadar güvenilir? Bu keylerde sabit keyler.n3pix adlı üyeden alıntı: mesajı görüntüle
Yani bir başkasının eline geçse oda rahatlıkla kullanabilecek.
Bunun önüne geçmek istiyorum.
AUTOGenKey oluşturalım ama devamlı Generate edilen key'i mobil tarafına nasıl sunacağız? - 15-08-2018, 21:41:25Üyeliği durdurulduŞöyle ki, yapmanız gereken; API'inize Authentication yani Kimlik Kontrol mekanizması eklemek. Eğer Request ettiğiniz veriler, genele açıksa kullanıcının Authenticate edilmesine gerek bulunmaz, örneğin Kullanıcı Kaydı gibi, kullanıcı bilgilerini alırsınız ve API'e POST isteği gönderirsiniz. Burada kimlik kontrolü yapılmaz. Fakat, örnek veriyorum, kullanıcının verilerini silmek için kullanıcı olmanız veya yönetici yetkisine sahip olmanız gerekmektedir. Bu esnada, Authenticate etmelisiniz ve Token vermelisiniz kullanıcıya. Kullanıcı bu tokende yer alan veriler sayesinde, işlem yapabilir hale gelir. Umarım anlayabilmişimdir.BR9 adlı üyeden alıntı: mesajı görüntüle
Bu durumda, siz bana şunu söylemelisiniz, Request ettiğiniz veriler genele açık mı yoksa özel veriler mi? - 15-08-2018, 21:53:00Verilerin hepsi ciddi anlamda çok önemli veriler hocam. Yani hiçbir açık erişime sahip olmamalılar. Şuanda sistemde bir Authenticate durumu mevcut. Level olarak işliyor.n3pix adlı üyeden alıntı: mesajı görüntüle
HTTP-HEADER ile birlikte gönderilen bir TOKEN var açıkçası. Fakat tek başına yeterli olacak mıdır bu sistem sizce? - 15-08-2018, 22:14:35Üyeliği durdurulduEğer token, diğer kullanıcılara verilen tokenlerle benzeşmiyor en kötü %0.00001 olasılıkla benzer oluyorsa o yeter denilebilir. Fakat ekstra olarak dediğiniz gibi bir Kullanıcı-Şifre sistemi yapılabilir, bu verileri Uygulama İçinde Değişkenlerde saklamak yerine, veritabanınızı yüksek güvenlikli yaparak Kullanıcı-Şifre'ye erişebilirsiniz. Böylece Uygulama Seviyesinde veri saklamış olmak yerine Veritabanı Seviyesinde veri saklamış olursunuz. Veritabanı bağlantısı için gerekli verileri de ya gizli bir şekilde uygulamanıza eklettirin ya da Geliştirme Ortamı Değişkenleri ile atayın, NodeJS ds olduğu gibi. Verileri, Uygulama Seviyesinde saklamak sakıncalı olabilir diyorsanız tabii..BR9 adlı üyeden alıntı: mesajı görüntüle
- 15-08-2018, 22:17:34Merhaba,
Öncelikle uygulayacağınız herhangi bir yöntemin %100 güvenliği sağlayamayacağını belirtmek istiyorum. Web servisin güvenliği noktasında düşünülmesi gereken, alınabilecek en iyi önlemi/önlemleri uygulamak oluyor. Şu anda Instagram, Facebook vs. servisleride authorization olarak kullanıcıya üretilmiş apiKey'ler gönderiyorlar. Kimlik doğrulama mekanizması yani. (OAuth2.0 'ıda araştırabilirsiniz.)
Evet, kullanıcıya üretilmiş apiKey'e başkası eriştiğinde, sanki o kullanıcıymış gibi işlemler yapabilir. Aşağıda bazı önerilerim var, bunları uygulayabilirseniz biraz daha içiniz rahat olur
Sunucunuza SSL kurun.
Daha da güvenlikli olsun istiyorsanız, mobil uygulamalardan SSL Pinning ile servislere bağlantı kurdurun. (Yine de tam güvenlik yok)
Kullanıcıya üretilen apiKey'leri her istekte (örneğin; kullanıcı bilgilerinin çekildiği bir servis varsa) eskisiyle değiştirerek yenisini üretin ve response olarak dönün.
ApiKey'e erişilmemesi ne kadar önemli ?
Bu işlerle uğraşan bir çok lamer arkadaşlar bile, bazı araçlar ile Instagram dahil çok bilindik uygulamalar dahil, dataları manipüle edebiliyorlar.
Uygulamadan servisinize bağlanan cihazlar güvensiz bir ağa bağlı ise trafik dinlenerek, gelen giden datalar yine okunabilir. Önemli olan key'e erişilse de, kötü niyetli kişinin minimum zarar vermesi.
Servisinizdeki tüm metodlarda bu apiKey'i zorunlu tutar ve işlemler bu apiKey üzerinden yapılırsa sistemdeki başka kullanıcılara, başka tablolara kayıt dışı işlem yapamaz.
Önemli bir özellik, servisinizde rate-limit yapısı olsun.
Pathlerin isimlerini kolay tahmin edilebilir yapmayın.
Şu anda aklıma gelen temel önlemler bunlar olabilir, sadece servisin değil mobil uygulamalarında güvenli mobil uygulama geliştirme' ye dikkat edilerek yazılması gerekir.
İyi çalışmalar diliyorum
