Bảo mật là một phần quan trọng trong quá trình phát triển phần mềm. Phần lớn các ứng dụng di động thao tác với thông tin người dùng qua một remote server. Mặc dù công nghệ bảo mật đã có sự phát triển vượt bậc trong thập kỷ qua, nhưng nó vẫn là một chủ để thu hút được nhiều tranh luận.

Trong bài viết này, tôi sẽ liệt kê ra một vài chủ đề có liên quan đến bảo mật và phát triển ứng dụng di động. Bên cạnh đó thì tôi cũng đưa ra một vài đề xuất hữu dựng cho việc bảo mật ứng dụng của bạn.

Vấn đề an ninh chỉ là tương đối. Các lỗ hổng an ninh được khám phá và vá lại một cách thường xuyên. Không có gì là hoàn hảo cả. Do vậy bạn có rất nhiều thứ phải làm để tăng cường tính bảo mật cho ứng dụng của bạn.  Một tên trộm sẽ ngần ngại trèo vào một ngôi nhà có hàng rào điện hơn là một ngôi nhà bình thường.

Một vài nhà phát triển bỏ qua một điều rằng người sử dụng tin tưởng giao phó thông tin cá nhân cho họ. Là một lập trình viên, bạn có trách nhiệm đảm bảo an toàn cho những thông tin đó, không cần biết đó là thông tin gì, chúng có thể không quan trọng với bạn, nhưng lại vô cùng quan trọng đối với người dùng.

Apple rất coi trọng việc an ninh và bảo mật trong hệ sinh thái của họ. HealthKit là một ví dụ. Người dùng quyết định xem dữ liệu sức khỏe nào của họ sẽ được ứng dụng khai thác. Nói cách khác, Apple cho rằng trang thái ủy quyền của ứng dụng là một thông tin nhạy cảm.

Trước khi quyết định lưu trữ dữ liệu ở đâu hay như thế nào, bạn cần cân nhắc xem dữ liệu nên được lưu theo hình thức nào, ví dụ như lưu ở bộ nhớ hay ghi ra đĩa, hoặc gửi tới một remote server?. Điều này có thể đơn giản hóa  cấu trúc ứng dụng của bạn và tăng cường thêm tính bảo mật.

Nếu bạn quyết định lưu dữ liệu theo cách cục bộ thì bạn cần tìm hiểu nơi đặt những dữ liệu đó. Đối với những thông tin nhạy cảm, thì keychain là sự lựa chọn tốt nhất. Phương án này chỉ phù hợp với lượng thông tin nhỏ mà ứng dụng của bạn không thường xuyên truy cập tới.

Dữ liệu có cần phải back up trên ICloud hay Itunes?. Nếu đó không phải là vấn đề, thì bạn có thể nghĩ đến trường hợp lưu dữ liệu tại folder Caches của ứng dụng. Folder này sẽ không lưu trên ICloud hay Itunes.

Hệ thống mặc địch truy cập qua lớp NSUserDefaults là lưu trữ dữ liệu nhanh chóng và tiện dụng. Nhưng thật không may là hệ thống mặc định này lại thường xuyên bị lạm dụng bởi lập trình viên, nó diễn ra thường xuyên đến mức tất cả những thông những thông tin nhạy cảm như các chứng chỉ, token truy cập đều được lưu tại đây.

Một nơi tốt hơn cho những thông tin đó là keychain. Keychain được thiết kế với mục đích bảo mật và mặc dù keychain được quản lý bởi hệ điều hành, nhưng mặc định thì các ứng dụng khác không thể truy cập vào những thứ mà bạn đã lưu ở trong keychain.Lockbox, một thư viện dễ hiểu tương tác với keychain sẽ giúp việc giao tiếp với keychain trở nên thuận tiện và dễ dàng hơn.

Sẽ là hấp dẫn nếu lưu trữ keys, tokens, và thậm chí cả các chứng chỉ tại một nơi dễ truy cập, như file Info.plist hoặc một file JSON tại thư mục Application's Bundle của bạn. Tuy nhiên có một sự thật là rất dễ dàng để khai thác thông tin của một ứng dụng được tải từ App Store. Bằng cách lưu các API token của một web serivce tại Info.plist, các lập trình viên sẽ dễ dàng tìm thấy và sử dụng chúng.

An ninh và bảo mật đã là một lộ trình của Apple trong những năm qua, và các đối thủ khác cũng vậy. Apple đã quyết định đi trước một bước bằng việc giới thiệu khái niệm App Transport Security.  tại hội nghị WWDC năm ngoái.

Với App Transport Security, Apple hướng tới việc nâng cao khả năng bảo mật của nền tảng và ứng dụng chạy trên đó. Không cần biết Apple đã đầu tư bao nhiêu trong việc bảo mật hệ điều hành của họ, bảo mật vẫn là điểm yếu nhất của một hệ thống và bao gồm cả các ứng dụng bên thứ 3.

App Transport Security buộc ứng dụng phải gửi network request qua một kết nối bảo mật, nếu App Transport Security được kích hoạt, network request sẽ được gửi mặc định qua giao thứ HTTPS. Apple nhấn mạnh vào việc cam kết bảo mật bằng việc tự động kích hoạt App Transport Security cho những ứng dụng được build trên Xcode 7.

Hầu như mọi ứng dụng di động đều sử dụng network. Điều này cũng đồng nghĩa đây là nơi mà những hacker sẽ dồn trọng tâm vào. Network là một thực thể phức tạp và những ứng dụng được viết trên nền tảng của một loạt các công nghệ để lấy các dữ liệu mà họ quan tâm.

Chúng ta đã thảo luận về App Transport Security và cách thức họoạt động của công nghệ này. Thế nhưng chưa dừng ở đó, còn nhiều chủ để khác như certificate pinning để cam kết rằng server mà bạn đang dùng là trong sạch. Một thư viện hiện đại như Alamofire sẽ làm điều này trở nên dễ dàng hơn.

Hầu hết các ứng dụng sử dụng hoặc lưu trữ thông tin người dùng nhạy cảm. Thiết bị di động có thể truy cập vào một loạt các thông tin cá nhân và nhạy cảm như vị trí, danh bạ và các thông tin y tế.

Như tôi đã đề cập trước đó trong bài viết này, câu hỏi đầu tiên bạn cần phải tự hỏi mình là khi nào bạn cần phải truy cập vào thông tin này, và quan trọng hơn, khi nào bạn cần lưu trữ thông tin đó.

Nếu bạn có thể truy cập vào các thông tin bạn cần thông qua một native framework như HealthKit, vậy thì sẽ không cần phải nhân bản và lưu trữ thông tin. Ví dụ, Apple sẽ từ chối các ứng dụng lưu trữ thông tin về sức khỏe của người sử dụng trong iCloud.

Giả sử rằng bạn cần phải lưu trữ một số thông tin nhạy cảm, hãy xem liệu thông tin đó có  cần được lưu giữ cục bộ không?. Có cần thiết phải gửi thông tin nhạy cảm tới một remote server?

Bảo mật trực tuyến đã phát triển rất nhiều trong thập kỷ qua. Giao thức xác thực, chẳng hạn như OAuth, đã làm cho việc giao tiếp với các dịch vụ web an toàn và minh bạch hơn.

Nếu ứng dụng của bạn cần phải tương tác với một máy chủ bảo mật, hãy xem xét cách ứng dụng của bạn quản lý thông tin. Liệu ứng dụng lưu giữ chúng trong bộ nhớ hoặc lưu trữ chúng trên đĩa? Nếu bạn yêu cầu tên đăng nhập và mật khẩu của người dùng để lấy một thẻ truy cập, nó là tốt để lưu trữ các  access token đó. Nhưng nên bạn cũng lưu tên và mật khẩu? Câu trả lời là không có trong hầu hết các tình huống.

Đối với các ứng dụng làm viẹc với các dữ liệu nhạy cảm, như y tế hoặc các thông tin tài chính, sẽ là tốt hơn để giữ cho các thẻ truy cập vào bộ nhớ hơn là trên đĩa. Việc lưu giữ trong bộ nhớ làm cho dữ liệu trở nên an toàn hơn.

Tính bảo mật của một ứng dụng là một khía cạnh cơ bản của phát triển phần mềm. Hãy xem xét những dữ liệu nào của ứng dụng có quyền truy cập và liệu có nên lưu trữ những thông tin đó. Cân nhắc những giải pháp trên nếu bạn có ý định lưu trữ nhưng thông tin nhạy cảm và hãy tôn trọng người dùng của bạn. 

Nguồn bài viết: http://code.tutsplus.com/articles/how-to-secure-an-ios-app--cms-26533

Techmaster là trung tâm đào tạo lập trình di động từ năm 2011. Chủ trương không cấp bằng, nhưng đào tạo cẩn thận, tỷ mỷ, phương pháp sáng tạo, làm dự án thật, đảm bảo việc làm cho học viên tốt nghiệp.
Lập trình ứng dụng Android thương mại
Lập trình ứng dụng iOS Objective-C
Khóa học iOS Swift 2.x

Khóa học lập trình di động tại Techmaster:

Để cài đặt MacOSX lên phần cứng không phải Apple liên hệ chuyên gia cài Hackintosh:

  • Nguyễn Minh Sơn: 01287065634
  • Huỳnh Minh Sơn: 0936225565
  • Website: caidatmacos.com