Trả lời nhanh: Rà soát trước khi phát hành ứng dụng khác rà soát code web ở một điểm quyết định: bản đã lên cửa hàng thì không sửa nhanh được, người dùng phải tải bản mới và nhiều người không cập nhật. Vì vậy danh mục rà soát nên tập trung vào những thứ khó vá: quyền truy cập khai thừa, chuỗi bí mật lọt vào ứng dụng, xử lý lỗi mạng, và những chỗ chỉ lộ ra trên máy thật như bố cục tràn và hiệu năng cuộn.
Với web, phát hiện lỗi sau khi lên là chuyện của một lần triển khai. Với ứng dụng di động, đó là một vòng duyệt của cửa hàng cộng thời gian chờ người dùng cập nhật. Bài này là danh mục rà soát dành riêng cho tình huống khó quay lui đó.
Quyền truy cập, chỗ soi đầu tiên
Mở file khai báo quyền và đối chiếu từng dòng với chức năng thật của ứng dụng. Ba câu hỏi:
- Quyền này dùng ở đâu trong code? Nếu không tìm thấy chỗ dùng, hãy bỏ.
- Quyền này do thư viện nào kéo theo? Nhiều gói tự thêm quyền mà bạn không biết, và bạn vẫn phải khai báo với cửa hàng.
- Có quyền nào nhạy cảm không? Vị trí nền, danh bạ, tin nhắn đều cần giải thích rõ khi nộp.
Quyền thừa gây hai hậu quả: bị cửa hàng hỏi khi duyệt, và người dùng thấy danh sách quyền dài rồi ngần ngại cài. Cách khai báo cho khớp nằm ở bài chuẩn bị trước khi nộp.
Chuỗi bí mật trong ứng dụng
Điều mà nhiều người chưa nắm: mọi thứ nằm trong gói ứng dụng đều đọc được. Ứng dụng cài trên máy người dùng có thể bị dịch ngược, và chuỗi ký tự thì hiện ra rất dễ.
Ba loại phải tìm và loại bỏ:
- Khóa API của dịch vụ bên thứ ba có tính phí theo lượt gọi.
- Chuỗi kết nối tới database, thứ không bao giờ nên có trong ứng dụng.
- Địa chỉ điểm cuối nội bộ mà bạn tưởng không ai biết.
Cách xử lý đúng: mọi thứ nhạy cảm nằm ở phía máy chủ, ứng dụng gọi qua backend của bạn. Nếu buộc phải nhúng một khóa, hãy chọn loại khóa giới hạn theo tên gói và theo chữ ký ứng dụng, và coi như nó sẽ bị lộ.
Việc quét tìm chuỗi bí mật giao cho agent rất hợp: bảo nó tìm trong toàn bộ mã nguồn các chuỗi trông giống khóa và trả về danh sách kèm đường dẫn.
Xử lý lỗi mạng
Người dùng di động thường ở mạng chập chờn, nên đây là phần lộ ra nhiều lỗi nhất khi ra thật. Bốn chỗ kiểm:
- Mất mạng giữa chừng khi đang gửi đơn: ứng dụng có báo rõ và cho thử lại không, hay treo im lặng.
- Gửi lại có tạo bản ghi trùng không. Đây là lỗi tốn kém nhất về nghiệp vụ, cách phòng nằm ở bài kiến trúc backend cho app.
- Thời gian chờ có hợp lý không. Chờ sáu mươi giây rồi mới báo lỗi là quá lâu với người dùng di động.
- Có dùng lại dữ liệu cũ khi mất mạng không, hay chỉ hiện màn hình trắng.
Cách thử: bật chế độ máy bay giữa lúc đang thao tác, hoặc dùng công cụ giả lập mạng chậm trên máy giả lập.
Những chỗ chỉ lộ ra trên máy thật
Code biên dịch được và chạy đẹp trên máy mô phỏng vẫn có thể hỏng trên máy thật. Bốn chỗ:
- Bố cục tràn trên màn hình nhỏ, hoặc khi bàn phím hiện lên. Với tiếng Việt có dấu, chuỗi thường dài hơn bản tiếng Anh và hay làm vỡ bố cục thiết kế theo mẫu quốc tế.
- Hiệu năng cuộn với danh sách dài trên máy cấu hình thấp.
- Tiêu thụ pin nếu ứng dụng có tác vụ nền.
- Hành vi khác nhau giữa các dòng máy, nhất là với bản hệ điều hành tùy biến của từng hãng.
Vì vậy danh mục rà soát cuối cùng luôn phải có một bước chạy trên máy thật, nên máy cấu hình thấp giống người dùng phổ thông ở Việt Nam.
Danh mục rút gọn để dùng ngay
Bảy dòng, dán vào tài liệu nội bộ và chạy trước mỗi lần phát hành:
- Quyền trong file khai báo, mỗi quyền tìm được chỗ dùng.
- Quét chuỗi bí mật trong toàn bộ mã nguồn.
- Thử mất mạng ở ba luồng chính, xem có báo lỗi rõ không.
- Thử gửi lại một thao tác ghi, xem có tạo bản ghi trùng không.
- Chạy trên máy thật cấu hình thấp, xem bố cục và độ mượt khi cuộn.
- Kiểm mã phiên bản đã tăng và bản dựng đã ký đúng khóa.
- Xem lại phần khác biệt so với bản trước, tìm thay đổi ngoài dự kiến.
Bốn dòng đầu giao cho agent làm được, dưới dạng chỉ đọc và trả về danh sách phát hiện. Ba dòng cuối bạn tự làm. Cách yêu cầu rà soát cho gọn nằm ở bài về lệnh tắt, và bạn nên gói cả danh mục này thành một lệnh.
Danh mục soi theo thứ tự rủi ro
| Hạng mục | Soi cái gì | Mức rủi ro nếu bỏ qua |
|---|---|---|
| Chuỗi bí mật trong gói cài đặt | Khóa dịch vụ, mã truy cập, địa chỉ máy chủ nội bộ | Rất cao, gói cài đặt luôn có thể bị mở ra xem |
| Quyền truy cập xin thêm | Có quyền nào mới mà tính năng không cần không | Cao, ảnh hưởng cả việc gửi duyệt lẫn niềm tin người dùng |
| Xử lý khi mất mạng giữa chừng | Có thử lại vô hạn không, có báo cho người dùng không | Cao, đây là nguồn của phần lớn đánh giá một sao |
| Ghi nhật ký dữ liệu người dùng | Có in ra thông tin cá nhân hay mã phiên không | Cao, liên quan tới nghĩa vụ bảo vệ dữ liệu cá nhân |
| Dung lượng gói tăng thêm | So với bản trước tăng bao nhiêu | Trung bình, nhưng tích lũy dần rất nhanh |
Cách tìm chuỗi bí mật trong gói đã đóng
# Kiem tra tren GOI DA DONG, khong phai tren ma nguon# Vi bien moi truong co the bi nhung vao luc dong goi # Voi goi Android:unzip -o app-release.apk -d /tmp/soi-goigrep -ri "api_key\|secret\|password\|Bearer " /tmp/soi-goi | head -n 40 # Tim dia chi may chu noi bo bi lo:grep -ri "192.168.\|10.0.\|localhost" /tmp/soi-goi | head -n 20 # Sau khi soi xong nho don:rm -rf /tmp/soi-goi # Neu tim thay bi mat that: doi khoa do NGAY o phia may chu,# xoa trong ma nguon la chua du vi ban cu da phat hanh roiLỗi chỉ xuất hiện trên thiết bị thật
- Máy cấu hình thấp: danh sách giật, ảnh tải chậm, ứng dụng bị hệ điều hành đóng khi chuyển sang ứng dụng khác rồi quay lại.
- Mạng di động chậm: màn hình trắng vì chờ mãi không có trạng thái chờ, hoặc bấm hai lần thành hai đơn hàng.
- Xoay màn hình và đổi cỡ chữ hệ thống: giao diện vỡ ở những chỗ chỉ thử với cỡ chữ mặc định.
- Chuyển vùng nền lâu: để ứng dụng ở nền một tiếng rồi mở lại, phiên đăng nhập còn không, dữ liệu đang nhập còn không.
Câu hỏi thường gặp
Rà soát ứng dụng khác rà soát web ở đâu?
Ở mức khó quay lui. Web sửa xong là triển khai lại trong vài phút. Ứng dụng phải qua vòng duyệt và chờ người dùng cập nhật, nên hãy ưu tiên rà những thứ không vá nhanh được.
Khóa API nhúng trong ứng dụng có an toàn không?
Không. Mọi thứ trong gói ứng dụng đều đọc được nếu ai đó dịch ngược. Hãy để khóa ở phía máy chủ và cho ứng dụng gọi qua backend của bạn. Nếu buộc phải nhúng, dùng loại khóa giới hạn theo ứng dụng và coi như nó sẽ lộ.
Có cần thử trên máy thật không?
Có. Bố cục tràn trên màn hình nhỏ, độ mượt khi cuộn và hành vi khác nhau giữa các dòng máy đều chỉ lộ ra ở đó. Máy giả lập chạy trên CPU máy chủ nên luôn mượt hơn thực tế.
Agent rà soát được những gì?
Nên các việc máy móc: tìm chuỗi bí mật, đối chiếu quyền với chỗ dùng, tìm chỗ thiếu xử lý lỗi mạng. Phần đánh giá trải nghiệm và hiệu năng thật vẫn phải do bạn thử trên máy.
