iOS/Android Security Guideline (P2)

[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.

  • SQL
  • HTML
  • OSコマンド

[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