Creazione di un'app con un servizio prestato sicuro in Microsoft Way

-1

Questa settimana voglio avviare un progetto di app più grande che dovrebbe gestire molti dati. L'app fornirà un forum interattivo, una libreria multimediale che consente lo streaming e un modulo attività con notifiche push.

I dati del forum e i video devono essere ospitati su un server e forniti tramite un servizio, in modo sicuro.

Dato che sono principalmente un programmatore C # e amo EntityFramework, ho deciso di creare l'app in Xamarin.Forms che ha come target netstandard2.0 con EntityFramework.Core (avremo a malapena bisogno di una funzionalità UI speciale oltre alle cose offerte da Xamarin.Forms ). Voglio anche creare un servizio WCF che utilizza EntityFramework sul lato server. Dovrebbe gestire la pubblicazione nel forum e fornire URL video temporanei dalla libreria multimediale.

Il catalogo multimediale fornirà contenuti a pagamento, quindi abbiamo bisogno della massima sicurezza. I flussi di dati del servizio bruceranno, a causa di molti dati di trasferimento, quindi abbiamo anche bisogno delle massime prestazioni. Tuttavia, la sicurezza sulle prestazioni. Le condizioni richiedono di gestire 50k utenti attivi allo stesso tempo.

Le mie domande sono:

  • Quale protocollo di trasferimento dovrei scegliere per il servizio WCF e perché?
  • Il server ospiterà anche un IIS per il sito web dell'app, dovrei ospitare il servizio su IIS o dovrei creare un servizio WCF tradizionale ospitato da Windows stesso?
  • Qual è il modo migliore per garantire che il servizio WCF possa essere raggiunto solo dall'app? Poiché Xamarin utilizza Mono, le persone potrebbero decompilare l'app e leggere il suo codice sorgente molto facilmente. Ho bisogno di un'autenticazione corretta che non consentirebbe a nessuno di aggirare l'app e comunicare direttamente con il nostro servizio.
posta modiX 09.11.2017 - 11:04
fonte

1 risposta

4

Stai chiedendo che un'app mobile, senza alcuna sicurezza fisica, funga da applicazione attendibile all'interno della tua soluzione generale. Scusate. Non esiste alcun meccanismo per garantire la fiducia, almeno nessuno che abbia resistito alla prova del tempo (e agli hacker).

Il modo in cui normalmente si protegge un'applicazione sicura è con un certificato client. È possibile includere il certificato come file nel programma di installazione dell'app e configurare il client WCF per utilizzarlo. Ma poi qualsiasi utente può passare attraverso la memoria del suo dispositivo e ottenere il certificato e utilizzarlo da solo.

Puoi proteggere il certificato con una password e inserire la password nel tuo codice, ma un hacker può decodificare la tua applicazione e recuperarla.

Per proteggere quella password in un luogo fisicamente insicuro sarebbe impossibile senza qualcosa come crittografia casella bianca . Tuttavia, tutti i tentativi di crittografia della casella bianca sono stati interrotti e potrebbe essere letteralmente impossibile il modo in cui facciamo i cifrari, almeno per ora.

Quindi questo è quello che consiglierei:

  1. Nonostante quanto sopra, usa un certificato cliente con una password. Anche se può essere vanificato, richiede uno sforzo, e tale sforzo implica l'intento, per scopi legali.

  2. Includere una clausola nei termini di servizio che vieta il reverse engineering dell'applicazione o l'uso improprio del servizio web.

  3. Chiedi al server di emettere un token di sicurezza univoco per installazione, magari un digest MAC dell'impronta digitale del dispositivo, incluso il UDID / a>. Rendi costoso ottenere un token, ad es. costringere il cliente a eseguire un milione di hash di un nonce, quel genere di cose. Ciò rende difficile per un hacker raccogliere i token in massa.

  4. Monitora il tuo servizio per attività nefande.

  5. Quando viene rilevata un'attività dannosa, l'elenco nero include il token di sicurezza e interrompe l'accettazione delle sue chiamate.

  6. Progetta la tua API in modo che le funzioni sensibili siano conservate sul lato server. Ad esempio, invece di esporre un metodo SetHighScore , chiedi al server di impostare automaticamente il punteggio più alto quando un gioco è completato.

Probabilmente è il meglio che puoi fare e probabilmente adeguato per una normale app per dispositivi mobili.

    
risposta data 09.11.2017 - 19:38
fonte

Leggi altre domande sui tag