Assicurarsi che i dati provengano dal server

4

Quindi un'app Web acquisisce i dati da un server con ajax. Sono interessato a sapere se c'è qualche procedura guidata di crittografia che dovrebbe assicurarsi che i dati provengano da quel server. Ad esempio, qualcuno può modificare il proprio file hosts e utilizzare un server diverso per il dominio e passare diversi dati all'app Web senza modificarlo.

Sto pensando a qualcosa di simile:

Server:
data_to_send // stringified json
integrity_code = getCode(data_to_send); //generates a code from the string.

The server outputs data_to_send and integrity_code

Then the client 
if (checkCode(data_to_send, integrity_code))
  //all fine

Sono un newbie totale della crittografia, ma l'idea è di avere qualche algoritmo segreto sul server che nessuno può vedere e un algoritmo pubblico sul client che determina se i dati sono interi. Può qualcosa del genere essere fatto?

    
posta Maciej Krawczyk 09.02.2017 - 00:24
fonte

3 risposte

2

La soluzione più semplice è implementare la crittografia TLS e utilizzarla quando si esegue una query sul server. Il traffico TLS tra il server e l'altro server che ospita la tua webapp verrà crittografato e l'autorità del server correttamente convalidata. Tuttavia, se SSL / TLS è installato, non significa automaticamente che la tua app lo stia utilizzando, devi comunque modificare gli URL degli endpoint da http:// a https:// nelle richieste ajax.

Modifica: pragmaticamente raccomando letsencrpyt se si utilizza linux, non è necessario più di 5 minuti per apache o nginx.

    
risposta data 09.02.2017 - 00:52
fonte
0

Se l'utente del tuo sistema è motivato a sovvertire il lato client del tuo sistema, allora c'è poco che puoi fare. I sistemi di gestione dei diritti digitali (DRM) cercano di fare qualcosa di simile, con un successo limitato.

Se si può evitare questa strada, dovrebbe esserlo.

    
risposta data 09.02.2017 - 00:31
fonte
0

Come menzionato in un'altra risposta, TLS (HTTPS) include l'autenticazione, che ha lo scopo di fornire il tipo di garanzia che stai cercando. Ci sono anche una varietà di altri strumenti crittografici per il problema più generale; Ad esempio, GPG è uno strumento di firma comune per la posta elettronica.

Tuttavia, mentre il tuo istinto di non fidarsi del fatto che il server che stai interrogando è quello giusto è corretto, non lo hai portato abbastanza lontano. Generalmente si suppone che qualsiasi codice eseguito sul client possa essere sovvertito completamente, quindi se un utente malintenzionato lo desidera, può semplicemente modificare il codice in modo che non faccia alcuna richiesta e utilizza solo alcuni valori codificati che loro vogliono.

Nei modelli client-server come app web e giochi online, il modo per evitare ciò è verificare sempre le azioni sul server. È ancora possibile eseguire calcoli sul client, ma non considerarli mai attendibili; tutto deve essere verificato dal server prima che sia considerato vero. Non so cosa stia facendo la tua app in modo specifico, ma per fornire un esempio dall'e-commerce, non puoi semplicemente fidarti del cliente per dirti che hanno pagato qualcosa; il server deve eseguire l'elaborazione del pagamento (o inviarlo a un servizio esterno attendibile per farlo), e solo quindi si procede con la spedizione del proprio articolo.

    
risposta data 09.02.2017 - 01:43
fonte

Leggi altre domande sui tag