Rest API w PHP dla aplikacji Android

Odpowiedz Nowy wątek
2018-11-04 20:02
Czarny szczeniak
0

Robię aplikację na telefon która będzie korzystała z "REST API" napisanego w PHP czyli po prostu obsługa POST request. Aplikacja będzie używała Retrofit + OkHttp z wygenerowanym certyfikatem SSL. Chcę użyć php ponieważ nie będę musiał bawić się serwery dedykowane aby takie api napisać np w javie tylko wystarczy mi prosty serwer dla stron www. Tylko jest jeden minus skrypt w PHP obsłuży także zwykłego forma z html a tego nie chcę... Chciałbym zablokować RESTA w PHP aby osbługiwał tylko szyfrowane zapytania z aplikacji. Pomysł mam taki aby aplikacja doklejała do zapytania dodatkową informację typu ID aplikacji, teoretycznie całe wtedy zapytanie leci szyfrowane więc nawet jeśli ktoś będzie chciał przechwycić jaki jest to ID aplikacji to tego nie zrobi i zapytanie ze zwykłego forma html do tego skryptu PHP nie przejdzie bo nie będzie prawidłowego ID aplikacji.

Co o tym myślicie jest to bezpieczne rozwiązanie? (wystarczające?) Chcę za wszelką cenę uniknąć nie powołanych wywołań tego kodu bo może mnie to narazić na koszta.

Pozostało 580 znaków

2018-11-04 20:17
1

A skąd to ID aplikacji miałoby pochodzić? Bo jeżeli z aplikacji, to każdy może się do takiego czegoś dostać w 2 minuty. Jeżeli chcesz ograniczyć dostęp do zasobów, to nie obędzie się bez autentykacji.

Pozostało 580 znaków

2018-11-04 20:39
Czarny szczeniak
0

jesli chodzi o autentykacje to używam dostępnego narzędzia z google czyli Firebase authentication, Możesz podrzucić jak to ogarnąć aby zabezpieczyć przed wywołaniami poza aplikacją? Jestem w tym temacie całkowicie zielony jeśli chodzi o PHP i zabezpieczenia. Może przesyłanie user id w headerze ? Czemu sądzisz że w 2 minuty się ktoś dobierze przeciez będzie to leciało po https

Pozostało 580 znaków

2018-11-04 20:45
1

Bo da się dobrać do tego co lata w aplikacji. Jeśli aplikację ma użytkownik to już nie masz nad nią kontroli

Przykład
https://niebezpiecznik.pl/pos[...]ajnowsze-maszyny-sprzedajace/

Twoja aplikacja to klient, który tylko przedstawia się serwerowi. Jeśli wiem jak się przedstawia klient to mogę udawać klienta skryptem

edytowany 2x, ostatnio: OtoKamil, 2018-11-04 20:46

Pozostało 580 znaków

2018-11-04 20:49
0

Ogólnie to nie jesteś w stanie zabezpieczyć się przed tym, żeby dostęp do Twojego backendu był tylko i wyłącznie z Twojego klienta, jeżeli masz publiczne API. Każdy może napisać sobie jakąś aplikację kliencką, która będzie się komunikowała z serwerem. I nie jest to nawet zależne od autentykacji, bo można też ją dodać do innych klientów. Możesz się przed tym bronić za pomocą np. rejestrowania urządzeń, ale po pierwsze jest to niewygodne dla użytkownika, a po drugie to też można zduplikować.

Jak połączyć Firebase z serwerem PHP nie wiem, bo nigdy tego nie robiłem.

Z kolei ID aplikacji mogę uzyskać na różne sposoby. Mogę na przykład ściągnąć aplikację z telefonu, zdekompilować ją i zobaczyć kod źródłowy. Mogę też napisać własną aplikację, która będzie analizowała inne, zainstalowane na telefonie i by pozwalała na przeglądanie ich kodu. Pewnie i inne sposoby by się znalazły.

edytowany 2x, ostatnio: Michał Sikora, 2018-11-04 20:51

Pozostało 580 znaków

2018-11-04 20:54
0

Przecież może ograniczyć do konkretnego IP (domowego czy VPN) i każdy request będzie z góry odrzucany.

Pozostało 580 znaków

2018-11-04 20:55
1

Wątek 2minut: aplikacje androida można w bardzo prosty sposób zdekompilowac np tutaj: http://www.javadecompilers.com/apk Kod po zdekompilowaniu jest bardzo czytelny dla osoby mającej doświadczenie na androidzie. Stosując proste metody np szukac danych po słowach kluczowych np retrofit http volley internet @get @post itp mozna szybko znaleźć kod odpowiedzialny za połączenie, potem to już z górki. Jeśli zapiszesz np token w pliku xml to będzie on dostępny po zdekompilowaniu. Już nawet nie chce wchodzić w sniffowanie sieci albo dostęp do danych gdy telefon jest zrootowany. Złota zasada: telefon nie jest bezpieczny tzn nalezy przyjąć że kod który napiszesz/algorytm jaki wykorzystasz będzie odczytany.

Pozostało 580 znaków

2018-11-04 20:57
0
itsme napisał(a):

Przecież może ograniczyć do konkretnego IP (domowego czy VPN) i każdy request będzie z góry odrzucany.

Może źle zrozumiałem autora, ale chyba nie chodzi o aplikację dla samego siebie.

Pozostało 580 znaków

2018-11-04 21:30
Czarny szczeniak
0

Aplikacja bedize dostepna dla wszsytkich. Chodzi mi o to aby wykonanie pewnych metod w php nie byl dostepny dla wszystkich (nieporzadane wykonania). Jeśli wszystko lata po https z certyfikatem SSL) to jesli bede w apce wyciagla user id z firebase i przesylal go w headerze do php (SSL) to bedzie mozliwy i tak do wyciagniecia przez osoby postronne? hmm kurde nie wiem jak sie zabezpeczyc aby nie szlo symulować nieporządanych wywołań

Pozostało 580 znaków

2018-11-04 21:34
0

No to zrób sobie middleware, który będzie sprawdzał czy user jest zarejestrowany w firebase. Jak nie do dziękuję, do domu.

Pozostało 580 znaków

2018-11-04 21:36
0
Czarny szczeniak napisał(a):

Aplikacja bedize dostepna dla wszsytkich. Chodzi mi o to aby wykonanie pewnych metod w php nie byl dostepny dla wszystkich (nieporzadane wykonania). Jeśli wszystko lata po https z certyfikatem SSL) to jesli bede w apce wyciagla user id z firebase i przesylal go w headerze do php (SSL) to bedzie mozliwy i tak do wyciagniecia przez osoby postronne? hmm kurde nie wiem jak sie zabezpeczyc aby nie szlo symulować nieporządanych wywołań

Nie da się. Pytanie czemu ci tak na tym zależy? Możesz wymyślać różne "zabezpieczenia", ale one tylko sprawią, że podszywanie się będzie upierdliwe, ale nie niemożliwe.

edytowany 1x, ostatnio: iksde, 2018-11-04 21:37

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0