[iOS/Android] Hiển thị privacy policy
Mức độ cần thiết: bắt buộc
Rủi ro
Đối với những hệ thống, dịch vụ có lưu giữ thông tin cá nhân, nếu như
không biểu hiện rõ mục đích sử dụng và việc có hay không cung cấp thông
tin cho người thứ 3, thì sẽ có khả năng mang đến sự nghi ngờ, bất an
cho người dùng.
Giải pháp
Nếu có lưu giữ và sử dụng thông tin cá nhân của người dùng, thì cần
hiển thị privacy policy, và có ghi rõ loại thông tin đó là thông tin gì,
mục đích sử dụng, và có cung cấp thông tin cho bên thứ 3 hay không.
[iOS/Android] Chức năng force update
Mức độ cần thiết: bắt buộc
Rủi ro
Điều gì sẽ xảy ra nếu app thiếu chức năng force update? Trường hợp
phát hiện ra app có bug nghiêm trọng, hoặc có vấn đề về security, thì
nếu như không có chức năng force update, sẽ không thể bắt buộc người
dùng update kịp thời, và tổn thất có thể sẽ lan rộng hơn.
Giải pháp
Thực hiện check version của app vào thời điểm thích hợp, ví dụ như
lúc khởi động lại app, login, hoặc khi request API,.., trường hợp cần
version up thì push thông báo update cho người dùng, đồng thời giới hạn
sử dụng version đang có vấn đề.
[iOS/Android] Thuật toán hash
Mức độ cần thiết: bắt buộc
Rủi ro
Thuật toán hash MD5 và SHA-1 đã được chỉ ra là có vấn đề về tính chất ngăn xung đột (collision resistance), nên không sử dụng.
Giải pháp
Sử dụng thuật toán SHA-256 khi tạo hash.
[iOS/Android] Escape input value của người dùng
Mức độ cần thiết: bắt buộc
Rủi ro
Trường hợp sử dụng input value của người dùng thành giá trị output
của app, nếu không thực hiện escape thích hợp, thì sẽ có nguy cơ gặp
phải các loại tấn công (injection) dưới đây:
- SQL injection
- JavaScript injection
- OS command injection
Giải pháp
Thực ra trường hợp tương ứng ít xảy ra với app native, tuy nhiên
trong trường hợp sử dụng các giá trị input từ người dùng như dưới đây,
thì bằng cách sử dụng escape, validation, hay place holder thích hợp, sẽ
tránh được tấn công.
[iOS] Cache dữ liệu truyền
Mức độ cần thiết: bắt buộc
Rủi ro
Nếu thực hiện truyền dữ liệu bằng URLSession,..thì dữ liệu truyền bởi
OS sẽ bị lưu tự động vào file (cache.db) trong thiết bị.
Dữ liệu cache này do được lưu bằng plain text, kể cả truyền bằng HTTPS,
nên có khả năng cung cấp thông tin có lợi cho kẻ tấn công.
Giải pháp
Khi tạo URLSession, bằng việc set nil cho URLSessionConfigurationのurlCache, sẽ tránh được việc lưu cache.
let config = URLSessionConfiguration.default
config.urlCache = nil
let session = URLSession(configuration: config)
Kể cả trường hợp sử dụng URLSessionConfiguration.ephemeral thì cũng
có thể tránh được việc lưu cache, nhưng trường hợp này có nhược điểm là
sẽ huỷ URLSession, Cookie cũng như thông tin xác thực, nên sẽ có vấn đề
nếu sử dụng Cookie để quản lý session.
let config = URLSessionConfiguration.ephemeral
let session = URLSession(configuration: config)
Lưu ý là dù có set eloadIgnoringCacheData thành cachePolicy của URLRequest thì cũng không tránh được việc lưu vào cache.db
Tham khảo:
https://qiita.com/alt_yamamoto/items/f67a7ddb6ba13cca7369
Comments
Post a Comment