API REST segura sin registro de usuario

2

Tengo una API en Node JS con la mayoría de puntos finales GET y una aplicación de página única del lado del cliente.

La aplicación debe estar abierta sin la necesidad de autenticarse, es decir, en booking.com, donde puede buscar hoteles sin necesidad de iniciar sesión o registrarse.

Cualquier persona puede golpear mis puntos finales y obtener datos JSON en bruto o incluso crear una aplicación que utilice mis puntos finales en su propia aplicación.

¿Cómo puedo asegurar mi punto final? Por ejemplo, con una firma basada en token o cualquier otra firma para confiar solo en la aplicación de mi cliente.

    
pregunta Ibrahim Mohammed 05.06.2018 - 14:29
fuente

1 respuesta

3

No puedes asegurar ningún secreto que sea público. Si la página HTML enviada al cliente tiene las claves API, ya no son secretas. Cualquiera puede leer la página y tomar la llave, y usarla como desee.

Tampoco piense en codificar, ofuscar o cifrarlo del lado del cliente tampoco. Las herramientas de desarrollo en cualquier navegador moderno permitirán al usuario ver la solicitud real y solo tomarán las teclas de la solicitud. Incluso si la aplicación es un binario con cifrado y anti-manipulación, y utiliza SSL con certificado pendiente, un usuario determinado tomará las claves. Puede tardar segundos o días, pero la clave se perderá.

Para proteger las claves, use un proxy. Cree un componente del lado del servidor que contenga las claves y acceda al backend, y su página HTML (o aplicación, o Java, o cualquier aplicación cliente) lo accederá.

Y realmente no puedes saber si el cliente que se conecta es tu cliente. Incluso los productores de juegos MMO tienen problemas para lidiar con los clientes alternativos que se utilizan para eludir algunas protecciones. Solo puedes hacerlo más difícil, pero, de nuevo, un atacante determinado puede omitir tus protecciones.

    
respondido por el ThoriumBR 05.06.2018 - 15:58
fuente

Lea otras preguntas en las etiquetas