Estoy creando una aplicación de una sola página (React-Redux en FE, Rails-API BE) que realiza un montón de llamadas REST API para obtener cierta información para los usuarios que han iniciado sesión. Algún subconjunto de esa información (base de datos de categorización) es más confidencial que otra información. Nuestro objetivo es, para que sea tan difícil como sea posible, que los datos se puedan extraer fácilmente de la respuesta de la API o se puedan raspar.
Según mi investigación, entiendo que no existe ningún método que haga posible el 100% de la seguridad de los datos, pero me gustaría hacerlo lo más difícil y frustrante posible sin afectar negativamente a la UX. También estamos más preocupados por el hecho de que la información es esencialmente simple JSON cuando viene del servidor al cliente, que es mucho más fácil de explotar que de raspar (ya que la IU en este caso no es la más fácil de eliminar).
Hasta ahora, según mi investigación, parece que debería hacer lo siguiente:
-
Use TLS / SSL para las llamadas a la API que evita los ataques de intermediarios y encripta los datos en tránsito. Pero esto no resuelve el problema de un usuario final malicioso.
-
Para hacer eso, vamos a hacer algo de limitación de velocidad en la API, y también podemos suspender temporalmente a los usuarios / raspadores que aparecen como 'bots' en los registros (ya que todos están registrados) en). Pero eso puede ser derrotado solo por usuarios maliciosos que aparecen como usuarios más pacientes.
-
Lo mejor, parece que podría ofuscar la respuesta de la API de dos maneras:
- Ofrezca claves de respuesta o uso que no revelen datos tan fácilmente.
- Envíe una respuesta encriptada desde el servidor que javascript descifra usando una clave que podría estar oculta en el código. De esta manera, los datos no serían visibles en las Herramientas de desarrollo o para cualquier otra persona que realice la llamada a la API.
Entonces, mi pregunta, ¿es el último punto anterior (el segundo punto en (3) el cifrado de respuestas) una forma efectiva de lograr mi objetivo? Y si es así, ¿cuáles son algunas cosas que debería tener en cuenta para lo mismo?
Si bien entiendo que ninguno de estos métodos es infalible, me gustaría entender mejor las mejores prácticas para tales casos de uso. ¡Cualquier pensamiento o idea sería muy apreciado!
¡Gracias!