Come può un'API web per un'app mobile essere protetta da accessi non autorizzati?

1

Ho un'API web di sola lettura da utilizzare con un'app mobile. Non ci sono accessi utente: solo ricerche eseguite su un'API e un insieme di risultati restituiti.

NOTA: non si tratta di USER che accedono come le domande che posso trovare, ma solo un log in per l'intera API, solo per confermare che è in realtà la nostra app iOS ad accedervi, e non alcune app per Android quello fatto da qualcun altro e sta usando la nostra API.

Vorrei che solo la mia app fosse in grado di accedere all'API. Anche se i dati sono pubblici, non voglio che nessuno sia in grado di utilizzare l'API.

Stavo per aggiungere un controllo chiave di base da inviare con ogni richiesta, come fanno molte API, un semplice key=sjetow3vthw3iulbtq4wv nella richiesta e verificarlo, ma capisco che le chiavi non possono essere archiviate in modo sicuro nelle app iOS , come del resto ....?

È impossibile da raggiungere? Dì un sito web come Booking.com e la loro app per iOS: sicuramente non può essere giusto che non ci sia protezione sulle loro API e chiunque potrebbe sviluppare un'app per aggirare la loro API? Possono essere protetti a tutti?

Grazie

    
posta samiles 27.10.2016 - 14:15
fonte

3 risposte

1

Ogni segreto che potresti avere in un'app mobile è perso per l'utente. Non puoi proteggere nulla che viene dato al cliente. D'altra parte, una richiesta per la tua API è la stessa da qualsiasi fonte. Il client può inviare qualsiasi cosa.

Dati questi presupposti, è impossibile rendere la tua API funzionante solo con il tuo cliente. Chiunque può estrarre qualsiasi identificativo dal proprio cliente e creare un'altra app con gli stessi identificatori o segreti per interrogare la propria API, e non si ha modo di sapere chi (che tipo di software) è il chiamante.

E da qui, penso che sia probabilmente una domanda legale, puoi creare un Termini di servizio idonei per evitarlo e parlare con gli avvocati di ciò che può essere fatto per ottenere protezione legale.

Tecnicamente il meglio che puoi fare è probabilmente usare le chiavi API, quindi anche se non vuoi identificare i singoli utenti, potresti comunque averli a creare le chiavi API per collegarsi alla tua API. In questo modo, potresti almeno controllare e eventualmente bloccare le chiavi API che ritieni siano contrarie al tuo ToS, e potresti anche negare l'emissione di una nuova chiave API per gli utenti offensivi. Ma per far questo avrai bisogno anche di strutture per provare effettivamente chi sono quegli utenti (quali chiavi API, tecnicamente), e che non saranno scienza esatta.

    
risposta data 27.10.2016 - 14:25
fonte
0

Cosa ti serve un modo per archiviare alcuni segreti sul client in un modo che il cliente non può né abusare né copiare questi. Questi segreti vengono quindi utilizzati per firmare i messaggi in modo che tu sappia che proviene da un client fidato.

Ci sono modi per farlo con hardware anti-manomissione protetto come smart card o dongle. Non c'è modo di farlo nel software solo se l'utente ha almeno tanto controllo sul sistema quanto l'applicazione, che è il caso dei telefoni jail broken ecc. Perché, qualunque sia l'applicazione, l'utente potrebbe fare anche all'interno la propria applicazione replicando il comportamento.

Questo significa che, a meno che non spediate l'hardware speciale a ciascun utente, l'unica scelta possibile è quella di provare una protezione limitata oscurando il codice e proteggendolo un po 'contro il reverse engineering.

    
risposta data 31.10.2016 - 10:11
fonte
0

Non c'è modo di identificare un'applicazione, perché richiederebbe un segreto che solo l'applicazione conosce. Ma una volta che è nel codice o in un file di dati dell'applicazione, è vulnerabile al reverse engeneering. L'unica protezione che hai è solo l'offuscamento e tutti sappiamo che la sicurezza con l'offuscamento è ... non sicura.

Se vuoi davvero proteggere la tua API senza preoccuparti troppo degli utenti con le password, dai un identificatore univoco a ogni utente legittimo della tua applicazione e autenticali attraverso una chiave asimmetrica. Questo è il meglio che puoi fare, e tutti i browser su qualsiasi piattaforma hanno la possibilità di gestire i certificati client in modo trasparente per l'utente.

    
risposta data 28.02.2017 - 23:23
fonte

Leggi altre domande sui tag