Jest jakaś opcja żeby zablokować możliwość łączenia się do mojego serwera innych klientów niż moja aplikacja mobilna?
Chcę uniknąć ataków fałszywych klientów (aplikacja na androida)
Zabezpieczyc server tcp przed niechcianymi klientami
- Rejestracja: dni
- Ostatnio: dni
- Postów: 43
- Rejestracja: dni
- Ostatnio: dni
- Postów: 342
Administratorem nie jestem i nie chciałbym Cie wprowadzić w błąd ale z tego co wiem, problem można rozwiązać w następujący sposób:
-
Na serwerze konfigurujesz firewalla (np. iptables) tak aby można się było połączyć tylko z sieci prywatnej na wybranych adresach IP.
-
Konfigurujesz wirtualną sieć prywatną (VPN).
-
Konfigurujesz połączenie w systemie Android tak aby łączył się do wirtualnej sieci prywatnej.
W takiej sytuacji dostęp do Twojego serwera powinien odbywać za pośrednictwem sieci prywatnej, do której trzeba być zalogowanym.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 43
Co do sieci prywatnej może być ciężko, bo będzie to aplikacja ogólnodostępna i dostęp do serwera musi być z każdego miejsc na świecie.
Użytkownik też nic nie powinien musieć zrobić oprócz instalacji aplikacji
- Rejestracja: dni
- Ostatnio: dni
- Postów: 342
volau napisał(a):
Co do sieci prywatnej może być ciężko, bo będzie to aplikacja ogólnodostępna i dostęp do serwera musi być z każdego miejsc na świecie.
Użytkownik też nic nie powinien musieć zrobić oprócz instalacji aplikacji
Rzeczywiście trochę to komplikuje sprawę. Powiem tak: nie jestem specem od sieci, ale wydaje mi się, że można serwery HTTP skonfigurować tak aby wymagane były certyfikaty klienta. Mógłbyś po prostu taki certyfikat klienta zawrzeć w swojej aplikacji i wtedy Twoja aplikacja łączyłaby się z użyciem tego certyfikatu (inni klienci tego certyfikatu nie powinni mieć więc być może da się samą aplikację Android jakoś dodatkowo zaszyfrować żeby nie dało się wyciągnąć z niej certyfikatu). Na ile jest to bezpieczne to nie wiem, ale zawsze to jakaś propozycja.
Niestety tak jak wspomniałem wyżej nie jestem specem od sieci i nie wiem na ile to wszystko ma sens co tutaj pisze. Być może powinieneś zapytać na forach gdzie siedzi więcej administratorów typu webhostingtalk?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 758
Jeśli mowa o zwykłym niskopoziomowym serwerze TCP (bo tak napisałeś w tytule wątku), przy twoich założeniach to jest niemożliwe od początku. Przy tworzeniu połączenia TCP wszystko co wie serwer to adres IP klienta i nic więcej, więc jeśli potrzebujesz dostępu z całego świata (czyli firewall na IP nie wchodzi w grę), to nie tędy droga. Musisz szukać czegoś na warstwie wyżej (jakiś klucz w headerze HTTP np.), ale pamiętaj, że i tak ostatecznie apkę mobilną można zdekompilować, podejrzeć ruch sieciowy itp. więc nie da się całkowicie przed tym zabezpieczyć z definicji.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 43
Z tego co wiem to niestety nie da się ukryć certyfikatu zawartego w apce, 7-zip radzi sobie z rozpakowaniem pliku apk bez najmniejszych problemów
Dokładnie klucz w headerze też nic mi nie da.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 342
OK, ale czy nie uważasz, że może lepiej byłoby pójść trochę inną drogą i po prostu zabezpieczyć serwer w taki sposób aby nie miało to znaczenia, który klient korzysta z Twojego API?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 43
tk napisał(a):
OK, ale czy nie uważasz, że może lepiej byłoby pójść trochę inną drogą i po prostu zabezpieczyć serwer w taki sposób aby nie miało to znaczenia, który klient korzysta z Twojego API?
Ogólnie jest zabezpieczony, tzn nie ma dla niego różnicy czy jest to moja apka czy inny klient ale chciałem uniknąć "dzikich" klientów.