Android: Kullanıcı adınızı ve şifrenizi mi saklıyorsunuz?


178

Kullanılacak kullanıcı adını ve şifreyi bir Android uygulamasında saklamak istersem, bunu yapmanın en iyi yolu nedir? Tercihler ekranından mı (ama kullanıcı bunu kaçırırsa?) Ya da bir iletişim kutusu açar ve kullanıcıdan kimlik bilgilerini ister mi? Eğer öyleyse, başvurunun durumunu korumak zorundayım. Bunu nasıl yaparım?


4
stackoverflow.com/a/786588/1166727 @RetoMeier'in (Google'da Android Geliştirme için Teknoloji Lideri) bu konuda ne söylediğine bakın.
tony gil

1
Kimlik bilgilerini depolamanın en güvenli yolunu arıyorsanız, bu cevabı okuyun stackoverflow.com/a/20560574/730807
Durai Amuthan.H

3
@ Sorununuzu nasıl çözdünüz?
Erum

@Legend, şifrelemeden sonra tercihlerde pwd tasarrufu biraz ışık atabilir misin .. çünkü benim app herhangi bir internet olmadan çalışmak istiyorum o zaman nasıl anahtar alabilirim .. (coz cihazda anahtar saklayamıyorum)
eRaisedToX

Api +18 için anahtar deposu kullanabilirsiniz. developer.android.com/training/articles/keystore
Golnar

Yanıtlar:


115

Gördüğüm çoğu Android ve iPhone uygulaması kimlik bilgilerini istemek için bir başlangıç ​​ekranı veya iletişim kutusu kullanıyor. Kullanıcı için sık sık adını / şifresini yeniden girmek zorunda hantal olduğunu düşünüyorum, bu yüzden bu bilgi depolamak kullanılabilirlik perspektifinden mantıklı.

( Android geliştirici rehberi ) tavsiyesi :

Genel olarak, kimlik avı saldırılarını daha belirgin ve başarılı olma olasılığını artırmak için kullanıcı kimlik bilgilerini sorma sıklığını en aza indirmenizi öneririz. Bunun yerine bir yetkilendirme belirteci kullanın ve yenileyin.

Mümkün olan yerlerde, kullanıcı adı ve şifre cihazda saklanmamalıdır. Bunun yerine, kullanıcı tarafından sağlanan kullanıcı adını ve parolayı kullanarak ilk kimlik doğrulamasını gerçekleştirin ve ardından kısa ömürlü, hizmete özgü bir yetkilendirme belirteci kullanın.

AccountManger'ı kullanmak, kimlik bilgilerini depolamak için en iyi seçenektir. SampleSyncAdapter nasıl kullanılacağını bir örneğini sunmaktadır.

Bu, herhangi bir nedenle sizin için bir seçenek değilse, Tercihler mekanizmasını kullanarak kalıcı kimlik bilgilerine geri dönebilirsiniz . Diğer uygulamalar tercihlerinize erişemez, bu nedenle kullanıcının bilgileri kolayca açığa çıkmaz.


40
Tercihlerde olduğu gibi şifre bilgilerinin devam etmesinin riskli olduğunu söyleyebilirim. Köklü telefonlarda bir uygulamanın tercihler dosyasına erişmek mümkündür. Yapabileceğiniz en az şey şifreyi gizlemektir.
Jayesh

51
Birisi telefonunuz varsa ve root atabiliyorsa, verilerinizi güvende tutmak için yapabileceğiniz çok fazla bir şey yoktur. Şifreyi gizlemek kötü bir fikir değil, ama gerçekten daha fazla koruma eklemiyor. Daha da önemlisi, işletim sistemine önceden yerleştirilmiş birçok güvenlik katmanı olmasıdır. Tabii ki, bu önlemleri atlatmak için aptalca bir şey yapmak istemezsiniz. OAuth gibi bir sistem kullanmak ve cihazda kullanıcı adı ve şifre yerine bir jeton saklamak muhtemelen daha iyidir.
Eric Levine

4
Eğer kullanırsanız AccountManager(dolambaçlı şekilde cevabım gereği ve miguel'in @) ve biri GSM telefonunuzu da ele alır, onlar da depolanan kimlik bilgilerini geçersiz kılar gibi hesaplarınıza erişim için SIM'inizi kullanmaya devam etmek gerekir SIM değiştiğinde.
Jon O

3
SIP değişikliğindeki hesap silme işlemi bir süre önce kaldırılmıştır, çünkü özellikle birden fazla SIM'e sahip kişiler için bu çok az mantıklıdır. Telefonunuz çalınırsa daha iyi bir strateji, Google hesabı sayfanıza gidip söz konusu cihaza erişimi iptal etmektir.
Nikolay Elenkov

2
"Kimlik bilgilerini depolamak için AccountManger kullanmak en iyi seçenektir." Neden?
Luc

9

Android AccountManager'ı kullanmalısınız . Bu senaryo için özel olarak oluşturulmuştur. Biraz hantal ama yaptığı şeylerden biri, SIM kart değişirse yerel kimlik bilgilerini geçersiz kılmaktır, bu nedenle birisi telefonunuzu kaydırır ve içine yeni bir SIM atarsa, kimlik bilgileriniz tehlikeye girmez.

Bu aynı zamanda kullanıcıya cihazda sahip oldukları herhangi bir hesap için depolanan kimlik bilgilerine tek bir yerden erişmenin (ve potansiyel olarak silinmesinin) hızlı ve kolay bir yolunu sunar.

SampleSyncAdapter (belirtilen @Miguel gibi) depolanmış hesap kimlik bilgilerini kullanan bir örnektir.


3
AccountManager'ın "SIM kart değişirse yerel kimlik bilgilerini geçersiz kılacağı" nerede belgelenir?
Eric Levine

Farkında değilim. Ancak, uygulamamın bazı kullanıcılarının SIM swaplarını takiben kimlik doğrulama sorunları yaşadıktan sonra inanmak / kabul etmek / anlamak için geldiğim bir şey.
Jon O

1
JavaDocs veya AccountManager kodunda görmüyorum. İyi bir özellik gibi görünüyor, sadece doğrulamak ve ayrıntıları anlamak güzel olurdu.
Eric Levine

2
@ NikolayElenkov'a göre, SIM kart değiştirme üzerindeki geçersiz kılma özelliği kaldırıldı.
ThomasW

2
@ThomasW Bunun için bir alıntı var mı? Bir tür kesin cevap almak harika olurdu.
Jon O

8

Kimlik bilgilerinizi korumanın en iyi yolunun, ilk olarak, rootsuz cihazlarda kolayca bulunamayan account.db dosyasında Şifreyi şifrelemeyle depolamayı düşünmektir ve köklü cihaz durumunda, bilgisayar korsanının şifresini çözmek için anahtara ihtiyacı vardır. o.

Diğer seçenek, Gmail'in yaptığı gibi tüm kimlik doğrulama işlemlerinizi yapmaktır. Gmail sunucusuyla ilk kimlik doğrulamasından sonra. şifrenizde kullanılacak Auth Jetonuna sahipsiniz. bu belirteç düz metin olarak saklanır. bu belirteç, parolayı Sunucu'dan değiştirmeniz durumunda yanlış olabilir.

son seçenek, 2 Faktörlü Kimlik Doğrulamayı etkinleştirmenizi ve cihazınız için Cihaza Özel Şifre oluşturmanızı öneririm. Cihazı kaybettikten sonra, tek yapmanız gereken o cihazı devre dışı bırakmaktır.


2
Accounts.db'nin şifreli olduğunu söyleyen bir kaynak gönderebilir misiniz? Yoksa belirli bir şifrenin şifrelenmesi gerektiğini mi söylüyorsunuz?
Michał K

1
@Riz, şifreleme için anahtarın nerede saklanacağı ... çünkü uygulamam internet olmadan çalışıyor, bu yüzden ağdan
alamıyorum




2

Yeni (Android 6.0) parmak izi donanımı ve API ile bu github örnek uygulamasında olduğu gibi yapabilirsiniz .


8
Başvurulan örnek proje Android Anahtar Deposunda bir anahtar oluşturur ve bunu şifreyi şifrelemek için bir şifre oluşturmak için kullanır. Şifrelenmiş parola ve şifre, paylaşılan tercihlerde base64 kodlu dizeler olarak saklanır. Başarılı parmak izi kimlik doğrulaması üzerine, gizli anahtar Android Anahtar Deposundan alınır ve kodu çözülen parolanın şifresini çözmek için kodu çözülmüş şifre ile birlikte kullanılır.
mjwheat

@mjwheat bu örnekte neler olup bittiğini anlamak için çok faydalı. Teşekkürler! Küçük bir yazım hatası: "... şifrelenmiş parolanın şifresini çözmek için."
muetzenflo

2

Bunlar gizli bilgilerinizi kırmanın zorluk derecesine .

  1. Açık metin halinde saklayın

  2. Simetrik bir anahtar kullanarak şifreli mağaza

  3. Android Anahtar Deposunu Kullanma

  4. Asimetrik anahtarlar kullanarak şifrelenmiş depola

kaynak: Android uygulamanızda şifre saklamak için en iyi yer neresi

Anahtar deposunun kendisi kullanıcının kendi kilit ekranı pimi / şifresi kullanılarak şifrelenir, bu nedenle cihaz ekranı kilitlendiğinde Anahtar Deposu kullanılamaz. Uygulama sırlarınıza erişmeniz gerekebilecek bir arka plan hizmetiniz varsa bunu unutmayın.

kaynak: Basitçe şifreleri ve diğer hassas bilgileri saklamak için Android Keystore kullanın


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.