Come si consente solo all'app di visualizzare / scaricare file dal server?

1

Ho un'app per Android che carica e scarica immagini dal mio server dedicato. Tuttavia, prima di andare in diretta, voglio sapere se c'è un modo in cui posso proteggere il server per consentire solo alla mia app di accedere e visualizzare i file su di esso. L'app al momento riceve i file dal server tramite un URL. Questi file sono sensibili e non vorrei che fossero visibili a tutti.

C'è un modo per impostare un nome utente e una password bloccati sulle directory sul server e in caso affermativo, come posso consentire alla mia app Android di aprire queste directory.

    
posta Advait S 26.07.2015 - 05:30
fonte

4 risposte

1

Stai facendo due domande (ti sto parafrasando ...)

Can I allow only my app to access my server?

No, questo è impossibile. Non puoi controllare il cliente. Telefono di root Avvia debugger. Prendi la tua chiave. Crea la tua app con la tua chiave.

How do I secure my server?

Utilizza un framework di sicurezza per il tuo server delle applicazioni. Se, ad esempio, si utilizza Java Spring, è possibile utilizzare Spring Security che gestisce l'autenticazione e l'autorizzazione.

    
risposta data 26.07.2015 - 22:46
fonte
0

"Can I allow only my app to access my server?"

Sì, è possibile limitare l'accesso al client. All'epoca non lo sapevo, ma è possibile controllare chi può accedere ai file archiviati su un server utilizzando l'autenticazione dell'intestazione HTTP / HTTPS, che richiede una combinazione "username: password" codificata in base 64 nell'intestazione della richiesta per ottenere il file (HTML , IMMAGINE, ecc.)

E per prevenire l'intestazione dello sniffing, il suggerimento di Milen di utilizzare un certificato HTTPS è la strada da percorrere perché HTTPS crittografa tutto usando la chiave pubblica del sito (incluse le intestazioni).

Quindi come dovrei implementarlo?

Sul lato Android, crea un'app che invii un nome utente e una password univoci ogni volta che è necessario recuperare il documento / immagine / file.

Sul lato server, configura uno script server in PHP, o Python, o qualsiasi cosa tu stia utilizzando (più comodo dell'utilizzo di .htaccess per limitare l'accesso ai file su apache) che base64 decodifica il nome utente e la password dalla richiesta, controlla la corrispondenza corretta, invia l'intestazione content-type corretta insieme al file.

Speriamo che questa informazione sia sufficiente per chiunque ne abbia bisogno. Anche se non ho finito di testare questo, si spera dovrebbe funzionare.

Nessuna delle altre risposte qui è sostanzialmente corretta, ma penso che ognuna di esse abbia contribuito in qualche modo a trovare una soluzione a questa domanda.

    
risposta data 11.09.2016 - 01:50
fonte
-1

Passa il nome utente e la password al server dall'app su HTTPS e confronta l'hash della password con l'hash memorizzato sul server con quel nome utente. Segui le "solite precauzioni":

  • usa un hash strong sul server (ad esempio SHA256)

  • usa un salt con la password (qualsiasi stringa veramente casuale farà)

  • usa una password complessa (pronuncia almeno 10 caratteri con lettere maiuscole e minuscole, numeri e segni di punteggiatura)

  • metti un piccolo ritardo nell'autenticazione fallita (ad es. fa 'dormire' il tuo server per 4 o 5 secondi prima di segnalare un errore di autenticazione - per dissuadere gli attacchi seriali brute force

  • monitora più tentativi di accesso falliti e avvisa / indaga su tentativi di abuso e blocca temporaneamente gli IP di origine, se possibile, nella tua architettura.

Puoi quindi restituire un token di sessione con una durata temporale limitata o semplicemente richiedere la coppia nome utente / password con ogni messaggio APP al server.

Questi sono metodi collaudati per gestire questo processo.

    
risposta data 26.07.2015 - 09:57
fonte
-2
  1. Utilizza HTTPS: un certificato decente è come $ 10, quindi non ci sono scuse in questo caso: -)
  2. Non inventare i propri meccanismi di autenticazione / autorizzazione. Usa ciò che le persone più intelligenti hanno sviluppato, testato, valutato e testato di nuovo. Un buon punto di partenza è valutare OAuth .
risposta data 26.07.2015 - 09:04
fonte

Leggi altre domande sui tag