Bảo mật Android SharedPreference


118

Tôi thắc mắc về bảo mật tùy chọn chia sẻ.

Có thể truy cập vào các tham chiếu được chia sẻ, ngay cả khi chúng được tạo trong MODE_PRIV (0)?
Có thể liệt kê tất cả các tùy chọn được chia sẻ có sẵn và sau đó tìm nạp tất cả cài đặt từ các ứng dụng khác không?
Tham khảo chia sẻ có phải là nơi tốt để đặt dữ liệu nhạy cảm, chẳng hạn như mật khẩu hoặc mã xác thực không?

Cảm ơn



Đáng xem, với những câu trả lời hay. Sở thích chia sẻ nói lên rất nhiều về phong cách lập trình của nhà phát triển.
Vishwa Ratna

Câu trả lời:


232

Tùy chọn Chia sẻ được lưu trữ dưới dạng tệp trong hệ thống tệp trên thiết bị. Theo mặc định, chúng được lưu trữ trong thư mục dữ liệu của ứng dụng với các quyền của hệ thống tệp được đặt chỉ cho phép UID mà ứng dụng cụ thể chạy cùng để truy cập chúng. Vì vậy, chúng rất riêng tư vì quyền đối với tệp Linux hạn chế quyền truy cập vào chúng, giống như trên bất kỳ hệ thống Linux / Unix nào.

Bất kỳ ai có quyền truy cập cấp root vào thiết bị sẽ có thể nhìn thấy chúng, vì root có quyền truy cập vào mọi thứ trên hệ thống tệp. Ngoài ra, bất kỳ ứng dụng nào chạy với cùng một UID như ứng dụng đang tạo sẽ có thể truy cập chúng (điều này thường không được thực hiện và bạn cần thực hiện hành động cụ thể để làm cho hai ứng dụng chạy với cùng một UID, vì vậy đây có lẽ không phải là một vấn đề lớn liên quan). Cuối cùng, nếu ai đó có thể gắn hệ thống tệp của thiết bị của bạn mà không cần sử dụng hệ điều hành Android đã cài đặt, họ cũng có thể bỏ qua quyền hạn chế quyền truy cập.

Nếu bạn lo lắng về quyền truy cập như vậy vào tùy chọn của mình (hoặc bất kỳ dữ liệu nào do ứng dụng của bạn viết), thì bạn sẽ muốn mã hóa nó. Nếu bạn lo lắng về chúng, bạn sẽ cần phải tìm ra chính xác mức độ bảo vệ cần thiết đối với mức độ rủi ro mà bạn thấy. Có một cuộc thảo luận rất rộng rãi về vấn đề này trong Bảo mật ứng dụng cho nền tảng Android , vừa được xuất bản vào tháng 12 năm 2011 (tuyên bố từ chối trách nhiệm: Tôi là tác giả của cuốn sách này).


2
Có tài liệu chính thức nào nói về điều này không? Bạn có lời khuyên nào chưa?
clu

26

SharedPreferences không là gì ngoài các tệp XML trong điện thoại / dữ liệu / dữ liệu / thư mục của bạn, Vì vậy, bất kỳ ứng dụng hoặc người dùng nào có đặc quyền siêu người dùng trên thiết bị gốc đều có thể truy cập SharedPreferences của bạn, ngay cả khi chúng được tạo bằng MODE_PRIV

Vẫn có một cách để bảo vệ nó khỏi mọi người ... Vui lòng kiểm tra liên kết này. Ở đây bạn có thể lưu trữ dữ liệu ở dạng pref với mã hóa, lớp này tự giải thích và rất dễ sử dụng.

https://github.com/sveinungkb/encrypted-userprefs

Như đã nói bởi những người khác, bất kỳ ai cũng có thể truy cập nó nhưng trong trường hợp này không ai có thể đọc dữ liệu bên trong nó vì nó đã được mã hóa. Vì vậy, nó an toàn. Để bảo mật tối đa, đề xuất của tôi sẽ là tạo khóa được sử dụng để mã hóa tại thời điểm chạy hơn là mã hóa cứng. Có nhiều cách để làm điều đó :)


8
sau đó làm cách nào để bạn lưu khóa đã tạo?
Olayinka

3
@Olayinka Sẽ an toàn hơn nếu mã hóa nó bằng một khóa khác và lưu nó trong a SharedPref. Nhưng sau đó, phải làm gì với chìa khóa kia? Mặc dù vậy, tình huống tốt nhất sẽ là gửi khóa được mã hóa và UID của thiết bị đến một máy chủ sử dụng SSL để được lưu trữ ở đó và truy xuất khi cần thiết. Điều đó sẽ yêu cầu kết nối, nhưng sẽ cho phép bạn đưa một thiết bị vào danh sách đen và đột nhiên có tất cả dữ liệu vào thùng rác. Nếu không có kết nối internet liên tục, bất kỳ nỗ lực mã hóa dữ liệu nào cũng không an toàn 100%.
Paulo Avelar

Tôi đã sử dụng giải pháp trên ... nó hoạt động 9 trong số 10 times..but Tôi nhận được lỗi: 1e06b065: chức năng Cipher: EVP_DecryptFinal_ex: BAD_DECRYPT" tại times..Does bất cứ ai có một ý tưởng?
Raj Trivedi

3
@PauloAvelar Sử dụng Android KeyStore để lưu trữ lâu dài và truy xuất khóa mật mã. Các khóa không được lưu trữ trong một ứng dụng, vì vậy chúng không thể bị xâm phạm. Thư viện được cung cấp không sử dụng nó. Nó lưu bí mật trong mã do đó không an toàn.
apex39

13

Thông thường, không, chúng không thể được truy cập bởi các ứng dụng khác, tuy nhiên, bạn nên lưu ý rằng SharedPreferences được lưu trữ dưới dạng tệp XML trong /data/data/thư mục, về cơ bản có nghĩa là bất kỳ ứng dụng nàođặc quyền siêu người dùng trên thiết bị gốc đều có thể truy cập vào SharedPreferences của bạn , ngay cả khi chúng được tạo nên bởiMODE_PRIV


3

Có thể truy cập vào các tham chiếu được chia sẻ, ngay cả khi chúng được tạo trong MODE_PRIV (0)?

Theo mã số. Nhưng bạn có thể truy xuất tệp ứng dụng nếu bạn có đặc quyền người dùng cấp cao.

Có thể liệt kê tất cả các tùy chọn được chia sẻ có sẵn và sau đó tìm nạp tất cả cài đặt từ các ứng dụng khác không?

Nếu bạn là siêu người dùng (thiết bị đã root) thì bạn có thể kéo tất cả các tệp riêng tư của ứng dụng.

Tham khảo chia sẻ có phải là nơi tốt để đặt dữ liệu nhạy cảm, chẳng hạn như mật khẩu hoặc mã xác thực không?

Không. Nó có thể bị hack dễ dàng. Nếu bạn muốn đưa bất kỳ dữ liệu nhạy cảm nào vào tệp prefrence được chia sẻ, bạn có thể mã hóa dữ liệu và lưu trữ. Bạn có thể lưu trữ khóa mã hóa của mình trong NDK / máy chủ.


Làm thế nào nó có thể bị hack dễ dàng?
John Sardinha

Có mẫu câu hỏi @Jo
Cuong Vo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.