2012-10-12 64 views
7

Tôi cần truy cập api yêu cầu xác thực http trên cơ sở mỗi người dùng bằng cách sử dụng api di động jquery.lưu trữ an toàn mật khẩu người dùng cục bộ trong ứng dụng di động jquery

Tôi định làm cho ứng dụng có sẵn dưới dạng trang web cũng như đóng gói ứng dụng ở Cordova cho các thiết bị khác nhau.

Nếu tôi có biểu mẫu đăng nhập nắm bắt tên người dùng và mật khẩu và lưu trữ dưới dạng biến javascript, có cách nào dữ liệu này có thể bị lộ không?

Nếu vậy, giải pháp thay thế tốt nhất để xử lý lưu trữ chi tiết xác thực người dùng là gì? Tôi rất thận trọng khi xây dựng một máy chủ trung gian nếu tôi không phải làm vậy.

Rất cám ơn. : D

+0

Ứng dụng có sử dụng xác thực cơ bản HTTP hay tên người dùng/mật khẩu được chuyển làm thông số trong mỗi lệnh gọi API không? – SilverlightFox

+0

thực sự, cả hai. http auth cơ bản trên mỗi cuộc gọi máy chủ - không có mã thông báo auth trả về. – significance

+0

Khi người dùng đã xác thực bằng xác thực cơ bản, dữ liệu này sẽ tự động được trình duyệt gửi đến từng tài nguyên được yêu cầu không?Tôi biết đây là cách nó hoạt động cho các yêu cầu trình duyệt khác, tôi không quá chắc chắn với JavaScript mặc dù. – SilverlightFox

Trả lời

3

Tôi khuyên bạn không nên lưu tên người dùng hoặc mật khẩu trong localStorage, mà thay vào đó để lưu trữ mã thông báo truy cập. Thẻ truy cập có thể được cập nhật và thay đổi thường xuyên, nó cũng không tiết lộ ai là người dùng hoặc mật khẩu băm của họ là gì.

Bên cạnh iOS Keychain hoặc nếu bạn đang mã hóa nó cho một thiết bị phi iPhone tăng cường bảo mật bạn có thể:

  • Thay đổi access token tại mỗi lần đăng nhập và mỗi lần ứng dụng được sử dụng
  • cửa hàng ID thiết bị trong cơ sở dữ liệu máy chủ (xem http://docs.phonegap.com/en/2.2.0/cordova_device_device.md.html#device.uuid)
  • Xóa localStorage và yêu cầu đăng nhập mới nếu access token hoặc thiết bị ID không khớp với dữ liệu được lưu trữ trong cơ sở dữ liệu

Đảm bảo bạn không lưu trữ ID thiết bị trong localStorage.

Để tăng cường bảo mật, bạn cũng có thể lưu trữ địa chỉ IP của người dùng trong cơ sở dữ liệu và kiểm tra (phía máy chủ) nếu địa chỉ IP khớp, nhưng điều này có thể quá nhiều do người dùng phải đăng nhập mỗi khi họ kết nối Internet vị trí mới hoặc nếu địa chỉ IP của họ thay đổi.

Lưu trữ địa chỉ IP trong cơ sở dữ liệu máy chủ, sau đó kiểm tra xem nó có khớp với (phía máy chủ) có lẽ là an toàn nhất vì không có vấn đề gì nếu ai đó giữ dữ liệu localStorage.

2

Vì vậy, tôi hiểu rằng bạn không kiểm soát chương trình phụ trợ mà bạn đăng nhập? Nếu bạn làm như vậy, tôi sẽ có xu hướng gửi tên người dùng/mật khẩu một lần, và sau đó lưu trữ một số mã thông báo truy cập sẽ cho phép bạn truy cập tiếp theo.

Nếu bạn không kiểm soát chương trình phụ trợ, bạn bị kẹt với lưu trữ tên người dùng/mật khẩu. Tôi sẽ nói, việc thiết lập chúng trong localStorage là an toàn vì nó được (chắc chắn là không an toàn lắm. Sau đó, một lần nữa, nếu thông tin đăng nhập của bạn không xảy ra trên HTTPS, tôi sẽ lo lắng hơn về mật khẩu bị rò rỉ ở đó so với thiết bị chinh no). Bạn có thể làm cho mật khẩu khó tìm hơn, không gọi các biến "tên người dùng/mật khẩu", mã hóa chúng trong javascript, làm xáo trộn mã của bạn. Nhưng cuối cùng, họ luôn có thể được truy xuất mà không cần nỗ lực quá nhiều với quyền truy cập vào thiết bị.

Sau khi đóng gói dưới dạng ứng dụng gốc, bạn có nhiều tùy chọn hơn, ví dụ: Chuỗi khóa iOS: http://shazronatadobe.wordpress.com/2010/11/06/ios-keychain-plugin-for-phonegap/

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