2012-10-03 42 views
11

Tôi đang xây dựng một ứng dụng iOS và người dùng xác thực với dịch vụ web của tôi. Tôi không muốn họ đăng nhập mỗi khi ứng dụng khởi chạy (mã thông báo kéo dài một tháng). Vì vậy, tôi muốn lưu bộ nhớ cache này trên thiết bị ở đâu đó.Lưu trữ mã xác thực trên iOS

Cách tốt nhất để làm điều này, an toàn là gì?

Tôi có thể chỉ dựa vào ứng dụng còn lại bị tạm ngưng và giữ mã thông báo trong 'bộ nhớ' không?

+0

Bạn cũng có thể xem hướng dẫn OWASP - https://www.owasp.org/index.php/IOS_Developer_Cheat_Sheet – rajagp

Trả lời

15

2 lựa chọn

  • Make sử dụng NSUserdefault (cửa hàng như truy cập đầu vào thẻ hoặc textfield [Remember me option])
  • truy cập Keychain (recommended) để thực hiện công việc.

NSUserdefaults không an toàn để lưu trữ các giá trị đáng tin cậy đó nhằm mục đích xác thực. Mặt khác, chuỗi phím được thực hiện để làm điều này, an toàn và bảo mật.

7

Bạn không thể tin tưởng rằng iOS sẽ giữ ứng dụng của bạn mãi mãi trong bộ nhớ. Vì vậy, bạn phải lưu mã thông báo để lưu trữ liên tục tại một số điểm.

Nhìn vào Keychain Service for iOS. Đây là nơi tốt nhất để lưu trữ những thứ như mật khẩu, mã thông báo và các phím khác.

+0

Nhưng điều gì xảy ra nếu thông tin đăng nhập nằm trong DB từ xa và anh ta không muốn lưu trữ các thông tin đăng nhập đó tại địa phương? Liệu cần phải sử dụng Keychain để lưu mã thông báo hoặc một cái gì đó như thế? –

+1

Không. Bạn không cần phải lưu trữ bất cứ thứ gì trong Keychain. Đó là vào bạn nơi bạn muốn lưu trữ bất kỳ bí mật. Tuy nhiên, giả sử bạn lưu trữ thông tin đăng nhập trong DB từ xa. Bây giờ câu hỏi là làm thế nào để ứng dụng của bạn xác thực với DB từ xa? Nếu nó sẽ lưu trữ tên người dùng/mật khẩu đã mã hóa thì bất kỳ ai cũng có thể dịch ngược ứng dụng của bạn, nhận tên người dùng/mật khẩu cho DB từ xa và sử dụng nó để nhận thông tin xác thực thực. Vì vậy, cuối cùng, bạn sẽ cần phải lưu trữ một cái gì đó trên thiết bị của bạn và Keychain Service là cách phổ biến và an toàn hợp lý để làm điều đó. –

5

Bạn không thể làm điều đó "an toàn". Mã thông báo là kiến ​​thức công khai và ngay sau đó trên thiết bị của bạn, tin tặc có thể truy cập vào nó bất kể bạn cố gắng làm gì để bảo vệ nó. Đặt nó trong keychain sẽ không thay đổi thực tế này. Ngay cả khi bạn lưu trữ nó ở đó, mà sẽ làm cho nó an toàn trong khi nó ở đó, họ chỉ có thể chờ đợi cho đến khi nó hết hạn sau đó snag tiếp theo khi nó đến trong dây tiếp theo thời gian. Mã thông báo truy cập của bạn không phải là điều bạn cần phải lo lắng về việc bảo mật, bởi vì bạn không thể, trên thực tế, làm điều đó trong môi trường di động.

Điều này có nghĩa là bạn có thể lưu trữ ở bất cứ đâu bạn muốn. NSUserDefaults là tốt, keychain là tốt, một cơ sở dữ liệu là tốt, một tập tin văn bản trong thư mục tài liệu của bạn là tốt. Tất cả chúng đều an toàn như nhau vì một hacker xác định có thể đơn giản chờ cơ hội thích hợp để truy cập dữ liệu mà họ muốn. Thay vào đó, bạn nên lo lắng về việc bảo mật thông tin đăng nhập xác thực của người dùng. Hãy chắc chắn rằng bạn lưu trữ chúng trong keychain và chỉ liên lạc với API của bạn qua HTTPS tới máy chủ có chứng chỉ SSL hợp lệ.

+6

Mặc dù tôi đồng ý rằng một thiết bị hoặc kết nối bị xâm phạm sẽ làm cho hầu hết mọi thứ không an toàn, bảo mật hoạt động chủ yếu bằng cách khiến cho kẻ tấn công truy cập thông tin hoặc phá vỡ điều gì đó. Với điều này trong tâm trí nó có ý nghĩa để lưu các thông tin nhạy cảm hơn trong một môi trường an toàn (chẳng hạn như Keychain iOS). Chắc chắn một hacker xác định có lẽ sẽ có thể đánh bại nó, nhưng một người ít được xác định sẽ không và đó là một chiến thắng. – lm2s

Các vấn đề liên quan