E 'possibile controllare l'identità di un'applicazione lato client dal lato server? [duplicare]

4

Supponiamo che ci sia un servizio web che è visibile pubblicamente, ma deve essere solo reattivo a una specifica applicazione client. Esiste un meccanismo per controllare l'identità dell'applicazione lato client per impedire ad un'applicazione non autorizzata di accedere al servizio?

Ad esempio, ho un servizio web chiamato dalla mia applicazione iOS. Voglio impedire ad altri di chiamare il mio servizio web.

Per quanto riguarda il fatto che gli altri possono decompilare la mia applicazione client e crearne un'altra che funziona come la mia, penso che l'unico modo per evitare l'accesso indesiderato al servizio è controllare l'identità dell'applicazione sul server per garantire che la richiesta provenga da la mia applicazione.

C'è un modo robusto e sicuro per farlo?

    
posta anonim 02.12.2013 - 19:41
fonte

3 risposte

1

No. Come hai detto, chiunque può decompilare e imitare la propria applicazione client. Puoi mai fidarti dell'input da un client se non ti fidi dell'utente del client.

Puoi poter aggiungere ulteriori salvaguardie per cercare di rendere più difficile la creazione di un nuovo client. Ad esempio, se il tuo cliente utilizza sempre servizi con una determinata frequenza massima, un client che si connette e invia richieste molto più rapidamente potrebbe essere un client compromesso.

    
risposta data 02.12.2013 - 20:09
fonte
5

La sicurezza non viene dal cliente, ma dal modo in cui implementa il tuo servizio web. Garantire che si accettano solo le transazioni dal proprio cliente fa poco per migliorare la sicurezza.

L'operazione di servizio web sicura richiede che il servizio operi indipendentemente dal client e che non ci siano API di servizio che possono causare danni al servizio o ad altri utenti di quel servizio.

Autenticazione, tracciamento della sessione e SSL sono tecniche che possono migliorare la sicurezza di un servizio web. Mi concentrerei su quegli sforzi prima di preoccuparmi di verificare le origini di un cliente connesso. Se il tuo servizio web è sicuro, non dovrebbe esserci beneficio per chiunque abbia accesso al codice sorgente del client.

Pensa al tuo servizio web come a una scatola nera. Il client può connettersi, emettere richieste e transazioni ma in nessun momento il cliente potrà mai sapere cosa sta succedendo all'interno della scatola nera.

    
risposta data 02.12.2013 - 20:52
fonte
0

L'ultima volta che ho implementato la sicurezza, ho usato Apache Shiro . Forniva un metodo affidabile e sicuro per implementare un accesso client / server sicuro ai dati dell'utente. Non solo ha fornito algoritmi di hashing e crittografia per garantire che le password di testo non fossero disponibili, ma forniva anche una struttura in cui utilizzare il sistema di sicurezza. Ogni componente può verificare il livello di autenticazione dell'utente corrente e quindi consentire / disabilitare i vari componenti da consegnare all'utente.

Mi sono integrato con un'applicazione GWT che consentiva account utente locali, account Facebook, twitter, linkedin, plaxo e google +. Ha gestito tutti i casi senza problemi.

Quando Shiro si integra con l'applicazione Web, utilizza la sessione lato server per memorizzare un identificatore per l'utente corrente. Questo viene assegnato solo nella variabile lato server quando un client fornisce correttamente un'autenticazione valida. Implementano anche un timeout configurabile per limitare il tempo di autenticazione.

Una cosa che non possono proteggere è un uomo nel mezzo dell'attacco, ma non è la tua posizione da proteggere contro quel tipo di attacco. Forza l'uso di SSL e ti sei coperto il culo.

Dai un'occhiata a questo elenco dei 10 principali rischi per la sicurezza come fonte di ispirazione.

Per quanto riguarda il modo in cui ciò si applica alla tua applicazione client, sarai intrinsecamente insicuro. In genere, si inserisce un codice univoco all'interno dell'applicazione per consentire solo a tale applicazione di comunicare con il proprio servizio Web. Una volta che una persona scarica il client, quel codice è facilmente disponibile. Qualsiasi sniffer di pacchetti sarà in grado di vedere le comunicazioni. Usa SSL, ed è più difficile, ma un decompilatore fornirà il testo.

Se limiti l'accesso agli utenti che effettuano l'autenticazione tramite il tuo servizio web, allora sei un buon passo avanti.

    
risposta data 02.12.2013 - 21:09
fonte

Leggi altre domande sui tag