¿Cifrar / firmar una solicitud de cliente a API?

2

Estamos construyendo una API JSON sobre nuestra aplicación web Ruby on Rails, utilizando JSONAPI :: Resources para exponer puntos finales y Doorkeeper para manejar la autenticación del usuario.

La mayoría de nuestros puntos finales de API se expondrán solo a usuarios autenticados, y Doorkeeper probablemente hará un gran trabajo para hacer cumplir eso. Pero todavía tenemos un par de puntos finales que no serán autenticados: registro, inicio de sesión, confirmación de la cuenta, y tal vez un par de otros.

Me preocupa que dejar que los puntos finales de la API se abran completamente nos expondrá a ataques, por ejemplo, mediante el envío de correo no deseado a nuevas cuentas.

  1. Tal vez me estoy preocupando más de lo necesario? ¿Las API generalmente dejan este tipo de punto final inseguro y agregan sistemas de prevención como la limitación?
  2. Si no es así, ¿está firmando (o cifrando) mis solicitudes antes de enviarlas al servidor API el enfoque correcto?
  3. Y si es así, ¿tiene alguna recomendación o un enfoque preferido para hacerlo?

Intenté utilizar palabras clave de Google como "solicitud de firma de API de Rails" o "solicitud de encriptación de API de Rails", pero no estoy seguro de que los resultados sean pertinentes o cuál sería la recomendada.

Los primeros clientes que hablarán con esta API serán Android y luego las aplicaciones de iOS, y podríamos agregar en las futuras aplicaciones web del lado del cliente (en este momento, nuestra aplicación web es monolítica y no utiliza la API). / p>     

pregunta David Stosik 18.09.2015 - 16:30
fuente

1 respuesta

1

La firma no tiene sentido cuando no tiene una clave pública del firmante. No se puede validar la firma de todos modos, por lo que un atacante que quiera enviarte spam con cuentas nuevas podría simplemente enviar una firma falsa. Hay medidas más eficientes que puede tomar como captchas o limitación basada en IP.

Por otra parte, el cifrado nunca es una mala idea. "Registrarse" y "Iniciar sesión" requieren el intercambio de información confidencial, por lo que deben estar encriptados. Además, en la era de la minería de datos, todo puede ser información confidencial, incluido el hecho de que John Smith examinó el perfil del usuario 29252 en example.com en 2015-08-19 17:02:03. Por lo tanto, incluso la información aparentemente inofensiva debe cifrarse siempre que sea posible. Hacer que todo su sitio web, tanto API como contenido estático, solo https o al menos compatible con https nunca es incorrecto.

    
respondido por el Philipp 18.09.2015 - 16:57
fuente

Lea otras preguntas en las etiquetas