La comunicazione tra due endpoint aperti è abbastanza sicura?

1

Sto costruendo uno strumento (molto semplice) per comunicare tra due server. Ho iniziato chiedendo se esistesse un'alternativa migliore rispetto a una sceneggiatura fatta in casa e siamo giunti alla conclusione che per l'antipasto era sufficiente una sceneggiatura fatta in casa. (Nello stack overflow, ma poiché la discussione si è verificata solo nei commenti, la domanda è stata chiusa)

Per chiarire le cose, il progetto è di inviare una richiesta a un server (endpoint di un'app web) da un'app Web (gestore).

Poiché l'endpoint è accessibile da tutti, ho implementato un sistema di verifica per essere un po 'più sicuro. So che un sistema sicuro è qualcosa che è noto a tutti (e non chiuso).

Quindi ecco cosa faccio:

Quando il gestore invia una richiesta, concatena tutto il valore dei parametri che verranno POST, oltre a un token. Quindi sha256 la stringa risultante e invia questo tra i parametri come checksum.

Sull'endpoint, concateno tutti i parametri (eccetto il checksum) e aggiungo il token sicuro, faccio un sha256 e lo confronta con il parametro checksum. Se sono uguali, va tutto bene.

Questo garantisce che i dati inviati non vengano modificati (nel caso qualcuno stia ascoltando la rete), i dati provengono da una fonte attendibile (con il token sicuro che è normalmente noto solo dalle mie app).

L'unico rischio che posso vedere qui è se qualcuno ottiene il token sicuro. Quindi questo protocollo fallisce. Ma nella stessa idea, se qualcuno ottiene la mia password di Facebook, ad esempio, sarà in grado di pubblicare qualsiasi cosa!

È abbastanza? Devo implementare più passaggi. Ho pensato a questi, cosa fai:

  1. Aggiunta di https negli endpoint
  2. Verifica l'ip sorgente

Grazie

    
posta Cyril N. 22.10.2014 - 11:37
fonte

1 risposta

3

Stai facendo affidamento su "sicurezza attraverso l'oscurità" e l'implementazione di questo tipo di sicurezza non è mai una buona idea.

È possibile creare una soluzione molto più semplice e sicura implementando SSL (o TLS) sulla soluzione. Ecco un ottimo tutorial su Stunnel:

  • si installa stunnel

  • crea certificati personalizzati

  • crittografa tutto in modo trasparente

Usando stunnel puoi trattare tutti i dati in chiaro, senza aggiungere complessità come crittografia, codifica o autenticazione.

    
risposta data 22.10.2014 - 14:58
fonte

Leggi altre domande sui tag