2011-07-22 32 views
5

Tôi hiện đang phát triển một ứng dụng tải xuống thông tin từ dịch vụ web mà tôi đã viết (bằng .net) và tôi muốn bảo mật kết nối để chỉ ứng dụng của tôi mới có thể lấy dữ liệu từ dịch vụ. Cách tốt nhất để thực hiện điều này là gì?Kết nối với dịch vụ web từ ứng dụng Android an toàn

Tôi không muốn bất kỳ ai có thể nhận được các chi tiết truy cập nếu họ dịch ngược/đảo ngược thiết kế ứng dụng của tôi. Có cách nào tôi có thể xác minh tính toàn vẹn của ứng dụng đang yêu cầu dữ liệu trước khi gửi lại không?

Tôi không quan tâm đến việc có thể đánh cắp lưu lượng truy cập để xem lưu lượng truy cập, tôi chỉ không muốn bất kỳ ứng dụng nào khác ngoài ứng dụng của tôi có thể gửi yêu cầu để bảo vệ chống lại mọi người.

Tôi rất là một người mới trong lĩnh vực bảo mật để đơn giản nhất có thể!

Trả lời

2

Chris,

Bạn có thể đọc trên một cơ chế gọi là One Time Passwords (OTPs). http://en.wikipedia.org/wiki/One-time_password

Bạn có thể thiết kế ứng dụng của mình để tạo OTP bất cứ khi nào nó cố gắng kết nối với dịch vụ web của bạn. Trách nhiệm xác nhận tính xác thực của OTP nằm trên dịch vụ web.

Hãy để tôi đi vào chi tiết một chút ngay bây giờ. Hãy tưởng tượng rằng ứng dụng của bạn nhúng vào nó một thuật toán tạo và cung cấp số 256bit bất cứ khi nào nó kết nối với dịch vụ web. Dịch vụ web bạn thiết kế cũng thực hiện phần xác thực của OTP. Thông thường, thuật toán OTP sẽ tính đến "Thời gian trong ngày" trong quá trình thực hiện (Tôi đề nghị google xung quanh một số triển khai Miễn phí). Vì vậy, cuối máy chủ (Trình xác thực OTP) chỉ hoạt động nếu thời gian trên Máy chủ và máy khách nằm trong một cửa sổ (nói + - n giây) của thời gian làm mới n. Thông thường, trình xác thực OTP cũng sẽ tạo OTP ở cuối và chỉ so sánh với OTP. Bạn cũng có thể HASH OTP trước khi gửi và so sánh HASH của OTP được tạo ra trên máy chủ (Không giúp đỡ hoặc an toàn hơn).

Bây giờ câu hỏi đặt ra, điều gì xảy ra nếu ai đó nhận được thuật toán (có thể bạn chỉ sử dụng OTP nguồn mở). Vâng, nó có nghĩa là được. Việc triển khai bảo mật tốt chỉ có thể truy cập bằng mật khẩu chính xác, ngay cả khi mọi thứ khác có sẵn cho kẻ tấn công. Để thực hiện điều này, bạn có thể phải thêm một logic để cung cấp ứng dụng của bạn vào lần đầu tiên họ kết nối, mà OTP mong đợi. Ở đây tôi tin tưởng vào sử dụng đầu tiên. Bạn có thể thêm một số logic để lưu trữ một id ứng dụng thường trú duy nhất được sử dụng trong khi tính toán OTP. Ngoài ra, bạn sẽ phải duy trì ánh xạ "resident-id" tới "public-id" trên máy chủ. Đây là "id công khai" mà bạn có thể đính kèm vào OTP và gửi tới máy chủ để xác thực ứng dụng gửi thực sự là một trong những bạn đã cung cấp. Điều này đòi hỏi bạn phải lập bản đồ "public-id" thành "resident-id" trên máy chủ và sau đó sử dụng "provisioned-id" theo cách tương tự để tạo OTP.

Trên đầu trang này, bạn có thể thêm logic để chỉ giải trí kết hợp "công khai-id" OTP + một lần. Điều này sẽ ngăn chặn các cuộc tấn công phát lại trong trường hợp ai đó chỉ ngửi và gửi lại cùng một yêu cầu đến dịch vụ web của bạn.

Hy vọng điều này sẽ cung cấp cho bạn một số ý tưởng.

Ujjwal

0

bạn có thể xem các bài viết

và điều này là rất hữu ích Blackberry kSoap2 & Soap Header

+0

Tôi không chắc mình hiểu câu trả lời của bạn.Hiện tại tôi đang sử dụng http get tiêu chuẩn để lấy dữ liệu từ webservice. –

+0

http://stackoverflow.com/questions/1048310/how-to-call-a-net-web-service-from-android bạn có thể xem câu hỏi này – acebisli

+0

Tôi hiểu hoàn toàn cách gọi webmethod của tôi, ứng dụng của tôi đã làm điều đó . Tôi chỉ muốn biết cách bảo vệ cuộc gọi chống trộm cắp dữ liệu! –

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