Construí una micro API usando Lumen que solo tiene un método GET singular, que devuelve datos JSON de una base de datos.

Agregué un middleware simple que obliga a la solicitud GET a tener "? Key = [secretPassword]" en la URL para que solo las personas que le dé la clave puedan realizar el GET.

Esta es mi primera API, ¿son suficientes medidas de seguridad?

Edite con más información: los datos no son confidenciales y no me importaría si la gente los encontrara, pero voy a mover la clave a los encabezados para una protección adicional, y estoy usando HTTPS.

0
user3869231 24 ene. 2018 a las 01:55

3 respuestas

La mejor respuesta

Agregué un middleware simple que obliga a la solicitud GET a tener "? Key = [secretPassword]" en la URL para que solo las personas que le dé la clave puedan realizar el GET.

Es difícil dar una respuesta completa, porque hay algunas incógnitas, pero lo estoy probando.

Algunas notas sobre este enfoque:

  • En general, no se recomienda poner secretos en una URL, porque las URL terminan en cachés y registros.
  • Definitivamente necesitas HTTPS. Sin HTTPS, otros pueden escuchar las solicitudes y respuestas HTTP.
  • ¿Cómo vas a llevar esta clave a tus usuarios finales? ¿Tiene alguna forma segura de enviárselos?
  • ¿Cómo estás creando claves al azar? Hay muchas formas malas de hacer esto.

En el título también preguntas esto:

¿Hay alguna necesidad de autenticación para una API REST de acceso público?

Bueno ... ¿depende de lo que intentas protegerte? ¿Importa si alguien puede llamar a la API? Entonces probablemente no necesites autenticación.

3
Evert 23 ene. 2018 a las 23:20

Si no es demasiado elevado, puede colocar una puerta de enlace API (Kong, Tyk, ApiGee, etc., etc.) frente a su API, esto le dará la flexibilidad para manejar cualquier tipo de autenticación o, para el caso, aún más a tiempo .

Generalmente, dependiendo de la sensibilidad de la información o del caso de negocios, la API GET también se deja abierta a veces.

1
goodbye_for_now 24 ene. 2018 a las 00:42

Tener la contraseña en la URL filtra la contraseña, incluso en el tráfico HTTPS. Utilice el encabezado de autorización en su lugar.

2
Will Hartung 23 ene. 2018 a las 23:01