
Hay muchas formas de construir autenticación en un producto basado en API como SparkPost, y la que elegimos desde el principio es el uso de claves de API. Inyectar tu clave de API como un encabezado de Autorización en bruto o a través de la autenticación básica HTTP estándar facilita mucho el uso de nuestras API. Las claves de API como esta son un estándar común para los servicios web, pero ¿cuán seguro es este sistema?
Hay muchas maneras de construir la autenticación en un producto con prioridad en API como SparkPost, y la que elegimos desde el principio es el uso de claves de API. Inyectar tu clave de API como un encabezado de Autorización bruto o a través de HTTP Basic Auth estándar hace que sea muy fácil usar nuestras APIs. Las claves de API como esta son un estándar común para los servicios web, pero ¿qué tan seguro es este sistema?
Los riesgos
Cuando se utiliza cualquier servicio web, si un atacante obtiene su clave API, puede actuar en su nombre y hacer cosas como (en nuestro caso):
enviar su correo electrónico de forma gratuita a través de su cuenta
descargar su lista de destinatarios y enviarla a spammers (si no son ellos mismos spammers)
editar sus plantillas para inyectar enlaces de phishing
enviar spam o phishing en su nombre
Cualquiera de estos resultados podría ser muy perjudicial para su reputación y para su negocio, y en el caso de phishing, potencialmente dañar directamente a sus usuarios finales. Por esta razón, es extremadamente importante asegurarse de que nadie pueda descubrir su clave API.
Las probabilidades
IP whitelisting al rescate
Cuando creas una clave API, ahora puedes especificar una lista de IPs autorizadas para usar esta clave. Puedes especificar varias IP, así como bloques de IP, usando la notación CIDR, para que no tengas que enumerar tus servidores individualmente. Cuando se utiliza la clave API, ya sea para APIs REST o SMTP, compararemos la IP que se conecta con esta lista para permitir o denegar el acceso.
Con esta característica, incluso si tu clave API se encuentra o es robada, solo tus servidores podrán usarla. Dados los riesgos y lo fácil que es configurarlo, recomendamos encarecidamente a todos nuestros clientes que utilicen esta característica.
Últimas palabras
Algunas recomendaciones personales sobre seguridad:
No mantengas tus claves API en el código. Hay muchos beneficios en mantenerlas como variables de entorno, como hace Heroku
Puedes crear una cantidad ilimitada de claves API, y es mejor para la seguridad dividir las responsabilidades entre varias claves API, en lugar de solo una clave multiusos. Esto también te permitiría tener diferentes listas blancas de IP por clave, para una mejor separación de responsabilidades
Si trabajas con terceros, no compartas tu clave API, sino crea una nueva para ellos, solo con los permisos necesarios, y vinculada a sus IPs
Ya que las claves API solo se pueden crear a través de la interfaz, habilitar la autenticación de dos factores en tu cuenta de SparkPost es imprescindible y solo toma 2 minutos