Sto costruendo un'applicazione a pagina singola (React-Redux su FE, Rails-API BE) che fa un sacco di chiamate API REST per ottenere determinate informazioni per gli utenti che hanno effettuato l'accesso. Alcuni sottoinsiemi di tali informazioni (database di categorizzazione) sono più confidenziali di altre informazioni. Il nostro obiettivo è quello di renderlo il più difficile possibile affinché i dati possano essere facilmente ricavati dalla risposta dell'API o scaricati.
Sulla base delle mie ricerche, comprendo che non esiste un metodo che consenta al 100% di proteggere i dati, ma vorrei renderlo il più duro e frustrante possibile senza influire negativamente sulla UX. Siamo anche più preoccupati del fatto che le informazioni siano essenzialmente semplici JSON quando provengono dal server al client, che è molto più facile da sfruttare rispetto allo scraping (poiché l'interfaccia utente in questo caso non è la più facile da analizzare).
Finora, sulla base delle mie ricerche, sembra che dovrei fare quanto segue:
-
Utilizza TLS / SSL per le chiamate API che impedisce gli attacchi man-in-the-middle e crittografa i dati in transito. Ma questo non risolve il problema di un utente malintenzionato.
-
Per fare ciò, faremo un certo limite di velocità sull'API, e possiamo anche sospendere temporaneamente utenti / scrapers che vengono mostrati come "bot" nei log (poiché sono tutti registrati) nel). Ma questo può essere sconfitto solo dagli utenti malintenzionati che appaiono come utenti più pazienti.
-
La cosa migliore, sembra che potrei offuscare la risposta dell'API in due modi:
- Offusca le chiavi di risposta o usa quelle che non forniscono dati con la stessa facilità.
- Invia una risposta crittografata dal server che decodifica javascript utilizzando una chiave che potrebbe essere offuscata nel codice. In questo modo, i dati non sarebbero visibili negli Strumenti per gli sviluppatori o a chiunque altro effettui la chiamata API.
Quindi, la mia domanda, è l'ultimo punto sopra (il secondo punto in (3) criptare le risposte) un modo efficace per raggiungere il mio obiettivo? E se sì, quali sono alcune cose che dovrei tenere a mente per lo stesso?
Pur comprendendo che nessuno di questi metodi è infallibile, mi piacerebbe capire meglio le migliori pratiche per tali casi d'uso. Qualsiasi idea o idea sarebbe molto apprezzata!
Grazie!