Chúc mừng năm mới Quý Mão 2023!
Đầu xuân năm mới, chúc toàn thể anh em Viblo có một năm năm mới tràn đầy sức khỏe, hạnh phúc, và thật là bùng nổ. Dưới đây là một số cách để giúp các bạn tăng tính bảo mật cho App của mình.
Một số cách tăng tính bảo mật cho Android App
1. Sử dụng Proguard
ProGuard là công cụ tích hợp sẵn trong Android Studio, với các tính năng giúp cho mã nguồn ứng dụng của bạn thu gọn lại (để dễ phân phối), làm rối (đổi tên các lớp, hàm, biến,.. trở nên khó đọc để chống dịch ngược), cuối cùng là nó tối ưu để ứng dụng chạy nhanh hơn. Nên sử dụng ProGuard trong cả môi trường đang phát triển (debug, staging) lẫn sản phẩm phát hành (release), nếu chỉ sử dụng ở sản phẩm phát hành mà bỏ qua sử dụng nó khi chạy trong môi trường đang phát triển có thể khiến ứng dụng bị crash không mong muốn khi phát hành...
Để cấu hình, ta thêm đoạn code sau vào file build.gradle
android { buildTypes { // Các môi trường cấu hình proguard getByName("release") { // Cho phép thu nhỏ mã, làm xáo trộn mã và tối ưu hóa isMinifyEnabled = true // Cho phép thu nhỏ tài nguyên, được thực hiện bởi plugin Android Gradle. isShrinkResources = true // Bao gồm các tệp quy tắc ProGuard mặc định được đóng gói cùng với plugin Android Gradle. proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro") } } ...
}
Trong đoạn cấu hình sử dụng ProGuard ở trên, file proguard-rules.pro
là file cấu hình thêm về cách thức hoạt động cho ProGuard
Khi ProGuard làm rối code, nó đổi tên các class, nhiều class tham khảo từ bên thứ 3 cũng bị chuyển đổi, nên có thể dẫn tới lỗi và crash. Trong trường hợp muốn không làm rối một lớp nào đó bạn dùng cấu hình keep, ví dụ trong file: proguard-rules.pro
ta thêm
-keep class com.myapp.entity.** { *; }
Với mã trên, sẽ giữ lại các lớp, phương thức trong folder com.myapp.entity
Một số nguồn tham khảo thêm: https://developer.android.com/studio/build/shrink-code?hl=vi, https://www.guardsquare.com/, https://viblo.asia/p/tim-hieu-ve-proguard-trong-android-924lJ30N5PM, https://gist.github.com/albinmathew/c4436f8371c9c41461ab
2. Chặn các thiết bị đã root
Việc root máy giúp ta làm chủ và có thể cài đặt thiết bị theo ý muốn của mình, nhưng bên cạnh đó có thể làm khả năng bảo mật thông tin của bạn bị ảnh hưởng. App của chúng ta có thể bị tấn công và đánh cắp thông tin. Vậy ta nên chặn các thiết bị đã root sử dụng App để đảm bảo an toàn (nếu cần thiết).
Có rất nhiều cách giúp chúng ta kiểm tra xem thiết bị đã root hay chưa, nhưng cách nhanh nhất và cũng tương đối chính xác là sử dụng thư viện rootbear (https://github.com/scottyab/rootbeer) để phát hiện. Ngoài ra nếu muốn ta cũng có thể tự viết để tối ưu hơn.
Cách sử dụng cũng rất đơn giản như sau:
RootBeer rootBeer = new RootBeer(context);
if (rootBeer.isRooted()) { //we found indication of root
} else { //we didn't find indication of root
}
3. Chặn chụp ảnh màn hình khi dùng App
Để giảm thiểu việc hình ảnh trong khi sử dụng app bị chụp lại, photoshop, sau đó sử dụng cho các mục đích xấu như lừa đảo,... Ta nên ngăn không cho người dùng chụp ảnh màn hình ở một số màn cần bảo mật, hoặc cả App.
Để sử dụng ta setFlag FLAG_SECURE
cho window
window.setFlags( WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE
)
Tham khảo: https://developer.android.com/reference/android/view/WindowManager.LayoutParams
Kết
Trên đây là một số cách để tăng tính bảo mật khi ta phát triển App trên android. Các bạn cũng có thể áp dụng các cách này với các thư viện, các hàm khác nhau cho phù hợp với từng framework(nếu có). Cảm ơn các bạn đã theo dõi.