¿Qué consideraciones de seguridad simples puedo / debo hacer para una API de solo lectura?

10

En este momento, estoy configurando una API, que se utilizará en el lado del cliente para configurar un sitio de directorio. Me pregunto qué pasos adicionales debo seguir para evitar que las personas obtengan acceso de escritura a los datos.

Algunas notas:

  • La API / base de datos no tiene información privada. Toda la información está disponible y ninguna es PII, etc. No sería un problema para mí si alguien leyera todos los datos.
  • Actualmente, la API es una aplicación de Sinatra y tiene métodos de escritura para que pueda agregar datos, protegidos por HTTP Auth.
  • Se alojará en Heroku y se servirá solo a través de HTTPS.
  • Los datos no cambiarán con frecuencia.
  • Se realizará una copia de seguridad de los datos de forma regular, por lo que incluso un robo destructivo no sería lo peor del mundo.

Mis preguntas:

  • ¿Hay áreas específicas que debería leer sobre seguridad en esta situación?
  • ¿Movería los métodos de escritura de la API (y el administrador) a una aplicación completamente diferente y luego simplemente sincronizar la base de datos manejará la mayoría de los problemas de seguridad?
  • ¿Es HTTP Auth suficientemente seguro con un nombre de usuario y contraseña largos o hay un método mejor que HTTP Auth para autorizarme en el administrador?

(Nota: Busqué preguntas relacionadas y encontré esto: ¿Es BASIC-Auth seguro si se realiza a través de HTTPS? pero realmente no está claro si hay una mejor opción o método que no genere aún más implicaciones de seguridad)

  • ¿Alguna otra sugerencia o pensamiento?

Actualmente estoy un poco fuera de mi elemento y quiero que este proyecto se envíe, en lugar de demorarme demasiado. Estoy seguro de que no hay un reemplazo para la capacitación adecuada en seguridad de aplicaciones, pero espero que debido a la naturaleza pública de los datos, puedo ignorar la mayoría de las situaciones de seguridad para comenzar y pasar más tiempo aprendiendo sobre ellas más adelante.

Saludos, Anders

    
pregunta Anders H 28.05.2013 - 00:14
fuente

3 respuestas

6

Esencialmente, solo necesitas ejecutar el Top 10 de OWASP y enfocarte en hacer que el control de acceso funcione correctamente .

En lo que respecta a la autenticación, la autenticación básica debe evitarse por varias razones. Es feo, inseguro y no es universalmente compatible. El modelo estándar es proporcionar a los usuarios una clave de API generada aleatoriamente que sea independiente de sus credenciales de inicio de sesión normales. Esto permite una autenticación razonable sin el riesgo de robo de credenciales. En cualquier caso, todavía recomiendo HTTPS en toda la API, y parece que ya estás haciendo esto.

    
respondido por el Polynomial 28.05.2013 - 15:52
fuente
6

Dividir las API es realmente la mejor opción, ya que el sitio público solo necesita ser de solo lectura, no hay razón para que las API de escritura vivan en él. Eso también le daría la posibilidad de implementar restricciones adicionales más fácilmente, como restringir las direcciones IP que pueden acceder al sitio de administración.

Si falla, usar la clave de API como se menciona en el polinomio o un token de sesión para acceder a las API es la mejor opción, ya que le permite llamar a las API sin tener que enviar credenciales con cada solicitud, lo cual es potencialmente más seguro.

Sin embargo, parece que las preocupaciones de seguridad que tiene alrededor de su aplicación son mínimas y secundarias, por lo que diría que la autenticación básica con una contraseña suficientemente sólida y HTTPS podría ser una implementación inicial perfectamente aceptable. Dado que usted es el único que escribirá en el sitio, no sé si estoy de acuerdo con las preocupaciones de Polynomial sobre la fealdad o la falta de apoyo universal.

Los problemas de inseguridad relacionados con la autenticación básica se cubrieron en la publicación a la que hizo referencia de AviD, y si desea mitigar esos , puede implementar un módulo de autenticación basado en Sinatra como Warden en lugar de usar la autenticación básica.

    
respondido por el Xander 28.05.2013 - 16:01
fuente
5

Esta pregunta es demasiado amplia para ser respondida. Para ser honesto, solo se siente que le estás pidiendo a alguien que haga tu trabajo por ti. Dicho esto, intentaré responderte de la mejor manera posible. Lo primero que debe hacer es ocuparse de la OWASP Top 10 List . Preste mucha atención a las vulnerabilidades de inyección y la gestión de sesiones.

Después de eso, asegúrese de que el usuario de la base de datos utilizado por el lado público de su API tenga acceso de solo lectura a la base de datos.

En cuanto a autenticación básica HTTP , no creo que conlleve un riesgo de seguridad enorme en su caso mientras estás utilizando HTTPS. Dado que solo los administradores deberán autenticarse, no es necesario complicar en exceso el proceso con las claves API.

    
respondido por el Adi 28.05.2013 - 16:00
fuente

Lea otras preguntas en las etiquetas