2012-09-17 21 views
11

Tôi có ứng dụng. Tôi biết tất cả các url, thông số, các loại yêu cầu http, vv (đây là ứng dụng của tôi).Chặn các yêu cầu HTTP được gửi từ ứng dụng Android

Tôi làm cách nào để chặn tất cả yêu cầu từ ứng dụng? Ví dụ - tôi nhấn một nút và có thể xem văn bản yêu cầu đến máy chủ.

Nhiệm vụ - để ẩn yêu cầu khỏi tin tặc tiềm năng và ngăn anh ta thực hiện yêu cầu thay mặt cho ứng dụng.

+0

Tôi đề xuất sử dụng https hoặc mã hóa khác để ẩn yêu cầu khỏi các tin tặc tiềm năng. –

+0

vâng, tôi biết về https – monyag

Trả lời

0

Theo như tôi hiểu, câu hỏi của bạn bao gồm hai vấn đề:

Làm thế nào để kiểm tra việc giao thông giữa máy chủ của bạn và khách hàng của bạn.

Có rất nhiều khả năng với nỗ lực tăng:

  • Logging: Vì nó là ứng dụng của bạn, bạn chỉ có thể chèn báo cáo khai thác gỗ chứa truy vấn của bạn và các thông số trước khi gọi yêu cầu http.
  • Nghe phía máy chủ: Vì đây là ứng dụng của bạn nên bạn cũng có quyền kiểm soát máy chủ. Với các công cụ như tcpdump bạn chỉ nên có thể đổ giao thông và phân tích nó lateron (ví dụ với Wireshark)
  • Nghe Client-side: Nếu bạn muốn chặn việc buôn bán hay "bên cạnh" các khách hàng mà bạn có thể thử sử dụng burpsuite để chặn lưu lượng truy cập bằng proxy hoặc trực tiếp trong WIFI của bạn.

Cách đảm bảo rằng chỉ khách hàng của bạn mới có thể gửi yêu cầu đến máy chủ. Tôi khuyên bạn nên sử dụng https với xác thực ứng dụng khách. Bạn sẽ phải triển khai chứng chỉ ứng dụng khách với ứng dụng của mình và sau đó máy chủ của bạn có thể kiểm tra tính xác thực của ứng dụng khách. Here bạn có thể tìm thấy một giới thiệu chung để xác thực ssl lẫn nhau.

0

Bạn không thực sự rõ ràng lý do tại sao bạn đang làm điều này trong câu hỏi của bạn, nhưng đối với những người khác: lý do thúc đẩy tốt nhất để làm điều này là vì bạn sợ ứng dụng của bạn là mục tiêu của kẻ tấn công bởi vì họ đã bằng cách nào đó ép buộc Intent của bạn (hoặc giao diện RPC khác) thành hành vi sai trái.

Cách tốt nhất mà tôi có thể nói là giới thiệu giao diện có hạn cho ứng dụng của bạn: không cho phép giao diện công khai hoặc giao diện RPC điều khiển ứng dụng của bạn để gửi thông tin mà bạn không muốn.

Ngoài ra, bạn có thể đăng nhập (thông qua trình bao bọc trong ứng dụng của bạn đến các cơ sở HTTP, có lẽ) các yêu cầu HTTP được gửi đến máy chủ. Câu hỏi đặt ra là, sau khi bạn đã đăng nhập thông tin trên thiết bị của khách hàng, bạn sẽ làm gì với số do. Có thể xác định chính xác khi ứng dụng đang làm điều gì đó "xấu" là khá nhiều điều không thể, và giả định một định nghĩa về những gì "xấu" nên đây là con đường sai để theo đuổi. Vì vậy, ngay cả khi bạn có thể đăng nhập và thậm chí nếu bạn có thể sử dụng HTTPS, tôi sẽ điều tra tất cả các con đường mà kẻ tấn công có thể sử dụng để thao tác ứng dụng của bạn để gửi dữ liệu đến dịch vụ web của bạn: bắt đầu từ đâu bạn thực sự gửi dữ liệu và làm việc theo cách của bạn ngược thông qua ứng dụng!

0

Mở rộng WebViewClient, tôi gạt phương pháp shouldOverrideUrlLoading như sau:

@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 

    String mainPage = "https://www.secureSite.com/myData/"; 

    if (url.startsWith(mainPage)) { 
     view.loadUrl(url); 
     return false; 

    } else { 

     //some dialog building code here 

     view.stopLoading(); 
     return false; 
    } 
} // end-of-method shouldOverrideUrlLoading 

Vì vậy, các điểm mã này là nó đánh giá mỗi URL mà ứng dụng của bạn bắt đầu tải. Nếu người dùng tìm thấy liên kết hoặc cố gắng tải URL của riêng họ KHÔNG phải là một phần của miền của bạn/URL được chỉ định, thì URL đó sẽ không khớp và sẽ không tải.

Nhưng trong tệp kê khai Android của bạn, bạn nên đặt thuộc tính android:exported thành false để ngăn các ứng dụng khác sử dụng nó.

Trích dẫn dưới đây từ here:

android: xuất khẩu hay không các thành phần của ứng dụng khác có thể gọi dịch vụ hoặc tương tác với nó - "true" nếu họ có thể, và "false" nếu không. Khi giá trị là "false", chỉ các thành phần của cùng ứng dụng hoặc ứng dụng có cùng ID người dùng mới có thể bắt đầu dịch vụ hoặc liên kết với nó.

Giá trị mặc định tùy thuộc vào việc dịch vụ có chứa bộ lọc chủ định hay không. Sự vắng mặt của bất kỳ bộ lọc nào có nghĩa là nó có thể được gọi chỉ bằng cách xác định tên lớp chính xác của nó. Điều này ngụ ý rằng dịch vụ này chỉ dành cho việc sử dụng nội bộ ứng dụng (vì những người khác sẽ không biết tên lớp). Vì vậy, trong trường hợp này, giá trị mặc định là "false". Mặt khác, sự hiện diện của ít nhất một bộ lọc ngụ ý rằng dịch vụ được thiết kế để sử dụng bên ngoài, vì vậy giá trị mặc định là "true".

Thuộc tính này không phải là cách duy nhất để hạn chế việc tiếp xúc dịch vụ với các ứng dụng khác. Bạn cũng có thể sử dụng quyền hạn chế các thực thể bên ngoài có thể tương tác với dịch vụ (xem thuộc tính quyền).

Thuộc tính này cũng có thể được sử dụng trong một số ActivityProvider. Here (hoạt động) và here (nhà cung cấp) là tham chiếu, nhưng nó là khá nhiều từ cho giống như mô tả Service, chỉ cần thay thế Activity hoặc Provider cho Service.

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