Domanda

Siamo nel processo di scrittura di un Windows app nativa (MFC) che verrà caricando alcuni dati al nostro web app. Di Windows applicazione vi permetterà all'utente di effettuare il login e dopo che sarà periodicamente caricare alcuni dati al nostro web app. Carica verrà fatto tramite semplice HTTP POST al nostro web app. La preoccupazione che ho è come possiamo garantire che il caricamento in realtà è venuto dalla nostra applicazione, e non dal ricciolo o qualcosa di simile. Credo che stiamo guardando una sorta di / crittografia a chiave privata pubblica qui. Ma io non sono sicuro se possiamo in qualche modo solo inserire una chiave pubblica nella nostra vittoria applicazione eseguibile e da fare con esso. O sarebbe quella chiave pubblica sia troppo facile da estrarre e utilizzare al di fuori della nostra applicazione?

In ogni caso, stiamo costruendo entrambe le parti (client e server) in modo praticamente nulla è un'opzione, ma deve lavorare attraverso HTTP (S). Tuttavia, noi non controlliamo l'ambiente di esecuzione di vittoria (client) app, più l'utente che esegue l'applicazione sul suo / il suo sistema è l'unico che da guadagnare qualcosa dal gioco del sistema.

È stato utile?

Soluzione

In definitiva, non è possibile dimostrare l'identità di un'applicazione in questo modo quando è in esecuzione su una macchina che non si possiede. Si potrebbe incorporare le chiavi, giocare con hash e checksum, ma alla fine della giornata, qualsiasi cosa che si basa su codice in esecuzione sulla macchina di qualcun altro può essere falsificato. Le chiavi possono essere estratti, il codice può essere reverse-engineered- è tutta sicurezza attraverso l'oscurità.

Passate il vostro tempo a lavorare sulla convalida e dei dati pulizia, e se si vuole veramente garantire qualcosa, garantire l'utente finale con un certificato client. Tutto il resto è solo una perdita di tempo e un falso senso di sicurezza.

Altri suggerimenti

A proposito di meglio si possa fare sarebbe quella di utilizzare HTTPS con certificati client. Presumibilmente con WinHTTP s 'interfaccia .

  

Ma io non sono sicuro se possiamo in qualche modo solo inserire una chiave pubblica nella nostra vittoria applicazione eseguibile e da fare con esso.

Se il cliente è da identificarsi con il server, che avrebbe dovuto essere la chiave privata incorporato.

  

O quello sarebbe troppo facile da estrarre e utilizzare al di fuori della nostra applicazione?

Se non si controlla ambiente di esecuzione della applicazione client, qualsiasi cosa la vostra applicazione può fare può essere analizzato, automatizzato e riprodotto da un attaccante che fa controllare che l'ambiente.

È possibile inserire strati obfuscatory intorno alla procedura di comunicazione, se è necessario, ma non sarai mai risolvere il problema. Giochi multiplayer hanno cercato di fare questo per anni per combattere la frode, ma alla fine è solo una corsa agli armamenti di offuscamento che non potrà mai essere vinta. Blizzard ha modo più risorse di te, e non in grado di gestire neanche.

Non hai il controllo sui binari una volta la vostra applicazione viene distribuita. Se tutti la firma e la logica di cifratura risiedono nel vostro eseguibile può essere estratto. codificatori intelligenti saranno capire il codice e costruire sistemi interoperabili quando c'è una motivazione sufficiente per farlo. È per questo che il DRM non funziona.

Un sistema complesso che lega una chiave per l'indirizzo MAC di un PC per esempio, è sicuro di fallire.

Non fidarti di un particolare eseguibile o sistema, ma la fiducia del tuo utenti. Affidare ciascuno di essi con un file di chiave privata protetta da una passphrase e spiegare loro come quella chiave li identificano come presentatori di contenuti sul vostro servizio.

Dal momento che si sta controllando il cliente, si potrebbe pure incorporare la chiave nella domanda, e assicurarsi che gli utenti non hanno accesso in lettura all'immagine applicazione - è necessario separare la logica a 2 piani - 1 che l'utente esegue, l'altro che si connette al servizio su HTTP (S) -. in quanto l'utente avrà sempre accesso in lettura a un'applicazione che è in esecuzione

Se ho capito bene, i dati vengono inviati automaticamente dopo l'utente accede -. Questo suona come è necessaria solo la parte di servizio

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top