Nếu tôi muốn lưu tên người dùng và mật khẩu để sử dụng trong ứng dụng Android, cách tốt nhất để làm điều đó là gì? Có phải thông qua màn hình sở thích (nhưng nếu người dùng bỏ lỡ điều này?), Hoặc bật lên một hộp thoại và yêu cầu người dùng cho các thông tin đăng nhập? Nếu vậy, tôi phải duy trì trạng thái cho đơn đăng ký. Làm thế nào tôi sẽ làm điều này?Android: Lưu trữ tên người dùng và mật khẩu?
Trả lời
Hầu hết các ứng dụng Android và iPhone tôi đã thấy sử dụng màn hình hoặc hộp thoại ban đầu để yêu cầu thông tin đăng nhập. Tôi nghĩ rằng nó là cồng kềnh cho người sử dụng phải nhập lại tên/mật khẩu của họ thường xuyên, do đó, lưu trữ thông tin đó có ý nghĩa từ một góc nhìn khả năng sử dụng.
Lời khuyên từ (Android dev guide) là:
Nói chung, chúng tôi khuyên bạn nên giảm thiểu tần suất yêu cầu người sử dụng thông tin - để làm cho các cuộc tấn công lừa đảo dễ thấy hơn, và ít khả năng thành công. Thay vào đó, hãy sử dụng mã thông báo ủy quyền và làm mới mã thông báo.
Nếu có thể, tên người dùng và mật khẩu sẽ không được lưu trữ trên thiết bị . Thay vào đó, hãy thực hiện xác thực ban đầu bằng tên người dùng và mật khẩu do người dùng cung cấp, sau đó sử dụng mã thông báo ủy quyền dành riêng cho dịch vụ ngắn hạn, .
Sử dụng AccountManger là tùy chọn tốt nhất để lưu trữ bằng chứng xác thực. SampleSyncAdapter cung cấp một ví dụ về cách sử dụng nó.
Nếu đây không phải là một tùy chọn cho bạn vì một số lý do, bạn có thể quay trở lại bằng chứng xác thực bền vững bằng cách sử dụng cơ chế Preferences. Các ứng dụng khác sẽ không thể truy cập các tùy chọn của bạn, vì vậy thông tin của người dùng không dễ bị lộ ra.
Tôi sẽ nói mạo hiểm để duy trì thông tin mật khẩu như trong sở thích. Trên điện thoại bắt nguồn từ, bạn có thể truy cập tệp tùy chọn của một ứng dụng. Ít nhất bạn có thể làm là làm xáo trộn mật khẩu. – Jayesh
Nếu ai đó có điện thoại của bạn và có thể root nó, không có nhiều thứ bạn có thể làm để giữ cho dữ liệu của bạn an toàn. Nó không phải là một ý tưởng tồi để làm xáo trộn mật khẩu, nhưng nó không thực sự bổ sung thêm sự bảo vệ nhiều hơn nữa. Điều quan trọng hơn là có nhiều lớp bảo mật đã được tích hợp trong hệ điều hành. Tất nhiên, bạn không muốn làm bất cứ điều gì ngu ngốc để phá vỡ những biện pháp đó. Tốt hơn nên sử dụng hệ thống như OAuth và lưu trữ mã thông báo trên thiết bị thay vì tên người dùng và mật khẩu. – elevine
Cũng thấy câu hỏi này [link] (http: // stackoverflow.com/questions/785973/what-is-the-the-thích-nhất-cách-to-store-user-settings-in-android-application) – Diederik
Bạn cũng có thể xem mẫu SampleSyncAdapter từ SDK. Nó có thể giúp bạn.
Hãy xem What is the most appropriate way to store user settings in Android application nếu bạn lo lắng về việc lưu trữ mật khẩu dưới dạng văn bản rõ ràng trong SharedPreferences.
Bạn nên sử dụng Android AccountManager. Đó là mục đích xây dựng cho kịch bản này. Đó là một chút cồng kềnh nhưng một trong những điều nó làm là vô hiệu hóa các thông tin địa phương nếu thẻ SIM thay đổi, vì vậy nếu ai đó vuốt điện thoại của bạn và ném một SIM mới vào đó, thông tin đăng nhập của bạn sẽ không bị xâm phạm.
Điều này cũng cung cấp cho người dùng cách nhanh chóng và dễ dàng để truy cập (và có khả năng xóa) thông tin đăng nhập được lưu trữ cho bất kỳ tài khoản nào họ có trên thiết bị, tất cả từ một nơi.
SampleSyncAdapter (như @Miguel được đề cập) là ví dụ sử dụng thông tin đăng nhập tài khoản được lưu trữ.
Tài liệu quản lý tài khoản sẽ "vô hiệu hóa thông tin đăng nhập cục bộ nếu thẻ SIM thay đổi" ở đâu? – elevine
Nó không phải là tôi biết. Tuy nhiên, đó là điều tôi đã tin tưởng/chấp nhận/hiểu sau khi một số người dùng ứng dụng của tôi gặp sự cố xác thực sau khi hoán đổi SIM. –
Tôi không nhìn thấy nó trong mã JavaDocs hoặc AccountManager. Nghe có vẻ như một tính năng tốt, nó sẽ chỉ là tốt đẹp để xác minh nó và hiểu các chi tiết. – elevine
Tôi nghĩ cách tốt nhất để bảo mật thông tin của bạn là trước tiên hãy nghĩ đến việc lưu trữ Mật khẩu bằng mã hóa trong tệp account.db mà không thể dễ dàng có sẵn trong các thiết bị không bắt nguồn từ và trong trường hợp thiết bị bị root chìa khóa để giải mã nó.
Tùy chọn khác là thực hiện tất cả xác thực của bạn giống như cách Gmail đang thực hiện. sau lần xác thực đầu tiên với máy chủ Gmail. bạn có Mã thông báo xác thực sẽ được sử dụng trong trường hợp mật khẩu của bạn. mã thông báo đó sẽ được lưu trữ ở dạng văn bản thuần túy. Mã thông báo này có thể sai trong trường hợp bạn thay đổi mật khẩu từ Máy chủ.
tùy chọn cuối cùng tôi khuyên bạn nên bật Xác thực 2 yếu tố & tạo Mật khẩu dành riêng cho thiết bị cho thiết bị của bạn. Sau khi mất thiết bị, tất cả những gì bạn cần là tắt thiết bị đó.
Bạn có thể đăng nguồn tin cho biết rằng tài khoản.db được mã hóa không? Hay bạn nói mật khẩu cụ thể nên được mã hóa? –
@Riz, nơi lưu trữ khóa để mã hóa sau đó ... vì ứng dụng của tôi hoạt động mà không có Internet, vì vậy không thể tải nó từ mạng – eRaisedToX
Thông tin tại http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html là phương pháp tiếp cận dựa trên thực tế, nhưng "sử dụng-ẩn-android-apis". Đó là một cái gì đó để xem xét khi bạn thực sự không thể có được xung quanh lưu trữ thông tin đăng nhập/mật khẩu cục bộ trên thiết bị.
Tôi cũng đã tạo một ý chính đã được làm sạch của ý tưởng đó tại https://gist.github.com/kbsriram/5503519, điều này có thể hữu ích.
Hãy xem bài đăng này từ nhà phát triển Android, có thể giúp tăng cường bảo mật trên dữ liệu được lưu trữ trong ứng dụng Android của bạn.
Với sự mới (Android 6.0) phần cứng vân tay và API bạn có thể làm điều đó như trong this ứng dụng mẫu github.
Dự án mẫu được tham chiếu tạo khóa trong Kho lưu trữ Android và sử dụng nó để tạo mật mã được mã hóa Mật khẩu. Mật mã và mật mã được mã hóa được lưu trữ dưới dạng chuỗi được mã hóa base64 trong các tùy chọn được chia sẻ. Sau khi xác thực vân tay thành công, khóa bí mật được truy xuất từ Kho lưu trữ Android và được sử dụng với mật mã đã giải mã để giải mã mật khẩu đã giải mã. – mjwheat
@mjwheat điều này rất hữu ích để hiểu những gì đang xảy ra trong ví dụ. Cảm ơn! Một lỗi nhỏ: "... để giải mã mật khẩu được mã hóa." – muetzenflo
Chúng được xếp hạng theo số thứ tự khó khăn để ngắt thông tin ẩn của bạn.
Store trong dạng cleartext
Lưu trữ được mã hóa bằng cách sử dụng đối xứng chính
Sử dụng Android Keystore
nhớ được mã hóa sử dụng các phím bất đối xứng
nguồn: Where is the best place to store a password in your Android app
Bản thân kho khóa được mã hóa bằng mã khóa/mật khẩu khóa của người dùng, do đó, khi màn hình thiết bị khóa Keystore không khả dụng. Hãy ghi nhớ điều này nếu bạn có một dịch vụ nền có thể cần truy cập bí mật ứng dụng của bạn.
nguồn: Simple use the Android Keystore to store passwords and other sensitive information
- 1. Kiểm tra tên người dùng và mật khẩu trong Android
- 2. Thực hành tốt nhất để lưu trữ tên người dùng và mật khẩu trong MySQL Databases
- 3. VisualSVN Server muốn có tên người dùng và mật khẩu
- 4. tên người dùng & mật khẩu trong sqlite3
- 5. Lưu trữ mật khẩu Windows
- 6. Lưu trữ tên người dùng/mật khẩu trên máy Mac bằng cách sử dụng Java
- 7. Curl để nhắc tên người dùng và mật khẩu
- 8. Gửi tên người dùng và mật khẩu cho svcutil.exe?
- 9. Mạo danh với tên người dùng và mật khẩu?
- 10. lưu trữ mật khẩu trong SQL Server
- 11. Bảo mật Ngoài Tên người dùng/Mật khẩu?
- 12. Nơi để lưu trữ muối mật khẩu và cách lấy mật khẩu
- 13. git: bắt buộc người dùng và mật khẩu nhắc
- 14. Android - Chúng tôi sẽ lưu tên người dùng và mật khẩu vào bộ nhớ thiết bị ở đâu?
- 15. Phương pháp hay nhất để lưu trữ tên người dùng và mật khẩu trên iPhone là gì?
- 16. Có tiêu chuẩn nào để lưu trữ tên người dùng và mật khẩu trong các ứng dụng WP7 không?
- 17. Với tên người dùng và mật khẩu, bạn mạo danh người dùng đó như thế nào?
- 18. Thay đổi tên người dùng và mật khẩu của tài khoản tùy chỉnh android
- 19. Việc lưu trữ mật khẩu người dùng trong một phiên PHP có phổ biến không?
- 20. lưu trữ an toàn mật khẩu người dùng cục bộ trong ứng dụng di động jquery
- 21. C#: Yêu cầu người dùng nhập mật khẩu sau đó được lưu trữ trong SecureString
- 22. Mật khẩu khóa tên mạnh được lưu trữ ở đâu?
- 23. WiFi Mật khẩu: cách lưu trữ và ở đâu?
- 24. WCF - BasicHttpBinding, Không có tên người dùng và/hoặc mật khẩu có sẵn, tên: null, mật khẩu: null
- 25. Tên người dùng/mật khẩu máy chủ HSQLDB
- 26. gvfs-mount chỉ định mật khẩu tên người dùng
- 27. Chạy mstsc.exe với tên người dùng và mật khẩu được chỉ định
- 28. cung cấp tên người dùng và mật khẩu chính xác, nhận được ORA-01017: tên người dùng/mật khẩu không hợp lệ; đăng nhập bị từ chối
- 29. Cách đặt tên người dùng/mật khẩu để kết nối với kho lưu trữ Subversion trong AnkhSVN trong Visual Studio?
- 30. Mật khẩu người dùng ASP.Net Store trong cookie phiên?
http://stackoverflow.com/a/786588/1166727 Kiểm tra những gì @RetoMeier (Tech Chì Phát triển Android tại Google) có nói về vấn đề này. –
Nếu bạn đang tìm cách an toàn nhất để lưu trữ thông tin xác thực.Đọc câu trả lời này http://stackoverflow.com/a/20560574/730807 –
@Giảm cách bạn giải quyết vấn đề của mình? – Erum