2012-09-17 41 views
11

Mam aplikację. Znam wszystkie adresy URL, parametry, typy żądań http itd. (To jest moja aplikacja).Przechwytywanie żądań HTTP wysłanych z aplikacji Android

Jak mogę przechwycić wszystkie żądania z aplikacji? Na przykład - nacisnąłem przycisk i widzę tekst zapytań do serwera.

Zadanie - aby ukryć żądania potencjalnych hakerów i uniemożliwić mu wykonywanie żądań w imieniu aplikacji.

+0

Proponuję użyć https lub innego szyfrowania dla zapytania hide od potencjalnych hakerów. –

+0

tak, wiem o https – monyag

Odpowiedz

0

O ile dobrze rozumiem Twoje pytanie składa się z dwóch problemów:

Jak kontrolować ruch pomiędzy serwerem a klientem.

Istnieje kilka możliwości wraz ze wzrostem nakładu:

  • Logging: Jak to jest aplikacja może po prostu wstawić oświadczeń rejestrowania zawierające zapytanie i parametry przed wywołaniem żądania HTTP.
  • Strona serwera nasłuchującego: Ponieważ jest to Twoja aplikacja, masz również kontrolę nad serwerem. Za pomocą narzędzi takich jak tcpdump powinien po prostu być w stanie zrzucić ruchu i analizować je lateron (np Wireshark)
  • Słuchanie Client-side: Jeśli chcesz, aby przechwytywać ruch lub „obok” klient może spróbować za pomocą burpsuite przechwycić ruch za pomocą serwera proxy lub bezpośrednio w WIFI.

Jak upewnić się, że tylko klienci mogą wysyłać żądania na serwer. Polecam używanie protokołu HTTPS z uwierzytelnianiem klienta. Będziesz musiał wdrożyć certyfikat klienta ze swoją aplikacją, a następnie serwer może sprawdzić autentyczność klienta. Here można znaleźć ogólne wprowadzenie do wzajemnego uwierzytelniania SSL.

0

Naprawdę nie wyjaśniam, dlaczego robisz to w swoim pytaniu, ale dla innych: najlepszym motywacyjnym powodem, dla którego chcesz to zrobić, byłaby obawa, że ​​Twoja aplikacja jest celem atakującego ponieważ w jakiś sposób zmusili twoją intencję (lub inny interfejs RPC) do niewłaściwego zachowania.

Najlepszym sposobem, aby to zrobić, jest przedstawienie ograniczonego, możliwego interfejsu użytkownika do Twojej aplikacji: nie zezwalaj na interakcje z publicznymi serwerami lub interfejsami RPC do manipulowania aplikacją w celu wysyłania informacji, których nie chcesz.

Dodatkowo możesz się zalogować (za pomocą wrappera w twojej aplikacji do urządzeń HTTP), być może, wysyła żądania HTTP na serwer. Pytanie brzmi: kiedy już masz informacje zalogowane na urządzeniu klienta, co zamierzasz z tym do. Możliwość prawidłowego określenia, kiedy aplikacja robi coś "złego", jest prawie niemożliwa, i zakłada definicję tego, co "złe", więc jest to zła droga do realizacji.

Więc nawet jeśli możesz się zalogować, a nawet jeśli możesz korzystać z HTTPS, powiedziałbym zamiast tego, że powinieneś zbadać wszystkie drogi, którymi atakujący może manipulować twoją aplikacją, aby wysłać dane do twojej usługi internetowej: zacznij od miejsca faktycznie przesyłasz dane i pracujesz wstecz za pośrednictwem aplikacji!

0

Rozszerzanie WebViewClient, ja overrode metodę shouldOverrideUrlLoading następująco:

@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 

Zatem punktem tego kodu jest to, że każdy adres URL, który ocenia aplikacja rozpoczyna ładowanie. Jeśli użytkownik znajdzie łącze lub spróbuje załadować własny adres URL, który NIE jest częścią Twojej domeny/podanego adresu URL, nie będzie on zgodny i nie zostanie załadowany.

Ale w swoim manifeście androidowym należy ustawić atrybut android:exported na false, aby uniemożliwić innym aplikacjom korzystanie z niego.

Cytat poniżej z here:

android: eksportowane , czy składniki innych aplikacji może powołać się na serwis lub interakcji z nim - „true”, jeśli tylko mogą, a „false” Jeśli nie. Gdy wartością jest "fałsz", tylko komponenty tej samej aplikacji lub aplikacje o tym samym ID użytkownika mogą uruchomić usługę lub powiązać ją.

Domyślna wartość zależy od tego, czy usługa zawiera filtry zamiaru. Brak jakichkolwiek filtrów oznacza, że ​​można go wywołać tylko podając dokładną nazwę klasy. Oznacza to, że usługa jest przeznaczona wyłącznie do użytku wewnętrznego aplikacji (ponieważ inni nie będą znać nazwy klasy). W tym przypadku domyślną wartością jest "false". Z drugiej strony obecność co najmniej jednego filtra oznacza, że ​​usługa jest przeznaczona do użytku zewnętrznego, więc domyślną wartością jest "true".

Ten atrybut nie jest jedynym sposobem ograniczenia ekspozycji usługi na inne aplikacje. Możesz również użyć uprawnień do ograniczenia zewnętrznych jednostek, które mogą wchodzić w interakcję z usługą (zobacz atrybut uprawnień).

Ten atrybut może być używany również w Activity i Provider. Here (działanie) i here (dostawca) jest odniesieniem, ale jest to słowo w dosłownym znaczeniu tego samego, co opis Service, po prostu zamień na Activity lub Provider dla Service.

Powiązane problemy