Secure REST API no-login per pochissimi client

1

Sto progettando un dispositivo di raccolta dati molto semplice per un progetto di ricerca. Poiché stiamo registrando, tra le altre cose, la posizione GPS dei veicoli reali, dobbiamo proteggere i dati. Poiché distribuiamo manualmente ogni dispositivo di registrazione, non sono necessarie registrazioni o accessi.

Ho creato un server web (Node.js), un database (MongoDB), un'app (iOS nativa) e un formato dati (JSON). Il client invia regolarmente JSON al server web con il seguente comando:

PUT/store/[deviceId]/?hash=[hash]

(con i dati effettivi come variabile POST)

Dove deviceId è un identificatore semplice, per ora solo un numero (0, 1 o 2), per farmi scegliere quale raccolta MongoDB memorizzare i dati.

Il hash è un hash del verbo HTTP, l'url e il segreto del dispositivo (solo una stringa casuale codificata in ogni dispositivo), ispirato a questa risposta .

La mia preoccupazione qui è quanto sia sicuro un tale sistema. Sto utilizzando HTTPS per proteggere il trasferimento dei dati e il segreto del dispositivo per assicurarmi che sia effettivamente uno dei nostri dispositivi, e non il figlio del vicino che tenta di hackerarci.

Basta così?

    
posta Erlend D. 05.03.2015 - 09:31
fonte

1 risposta

0

Per rispondere alla tua domanda devi prima raccogliere alcune informazioni: - Quali rischi vuoi mitigare attraverso la sicurezza? - Quali tecniche di prevenzione vuoi impiegare e quanti soldi sei disposto a spendere per loro? - Hai qualche forma di rilevamento delle intrusioni? - Usi un firewall?

per il resto, HTTPS è un buon passo, ma per questo tipo di "ricerca" potrebbe essere una verifica con certificati lato client. questo significa che non solo i dati sono protetti durante il trasporto. ma solo i clienti che conoscono il tuo modo "segreto" di comunicare con te possono (e.a. il certificato del cliente deve essere valido o il server non ascolterà nemmeno la richiesta)

per la memorizzazione di dati critici mongoDB non è la soluzione migliore (può perdere dati o addirittura non memorizzarli affatto) Ma questa è una discussione per un altro thread (come programmatori o sysadmin stackexchange).

Sull'aspetto delle cose, per un uso su larga scala non è poi così male. basta aggiungere un po 'di rilevamento delle intrusioni e di uso improprio (nessuno dovrebbe cercare stringhe casuali sul proprio back-end senza essere bannato dal firewall per almeno 10 minuti dopo ogni tentativo, incrementando esponenzialmente ad ogni tentativo o altro metodo di sicurezza). p>

Inoltre, al momento non hai alcuna protezione contro gli attacchi di replay. aggiungi una parte sensibile al tuo dato che si blocca dopo un po 'di tempo (come fa un cookie di sessione o un token CSRF). un contatore che aumenta dopo ogni invio di invio potrebbe fare già questo trucco.

    
risposta data 05.03.2015 - 11:36
fonte

Leggi altre domande sui tag