Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii
Code

Construyendo tu Startup: Asegurar una API

by
Difficulty:IntermediateLength:ShortLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Leveraging Crowdfunding
Building Your Startup: Approaching Major Feature Enhancements

Spanish (Español) translation by Alfonso Mora (you can also view the original English article)

Final product image
What You'll Be Creating

Bienvenido a la serie de Construcción su Startup con PHP serie, que está guiando a los lectores a través del lanzamiento de una startup real, Meeting Planner. Cada episodio información diversa codificación y desafíos de negocios, con ejemplos detallados que se puede utilizar para aprender.

Introducción

Recientemente, presente a usted Yii Simple Generación de la API REST y Nuevo "RESTful" Servicio API de Meeting Planner. En aquel momento, he mencionado que estas API fueron aseguradas solamente libremente. Sin duda, había un secreto compartido entre el cliente y el servidor, pero hubo un par de problemas.

En primer lugar, los tokens de usuario y clave secretos se transmitieron repetidamente en parámetros de consulta de llamadas SSL. Y sin otros verificación de autenticidad de los datos, permitiendo un ataque medio persona.

En el episodio de hoy, te guiará a través de cómo asegura la API contra estas debilidades para una API más robusta.

Si has estado leyendo nuestra serie de startup probablemente ya has probado Meeting PlannerSimple Planner pero si no, por favor, hazlo. Programar una reunión es muy fácil:

Como de costumbre, yo te participando en los comentarios, así que por favor ofrece sus pensamientos. También puede contactarme en Twitter @lookahead_io. Siempre estoy especialmente intrigado si quieres sugerir nuevas funciones o temas para futuros tutoriales.

Como recordatorio, todo el código para el Meeting Planner está escrito en el marco de Yii2 para PHP. Si desea más información sobre Yii2, revisa nuestra serie paralelo Programación con Yii2.

La Seguridad Inicial de la API

Vamos a empezar por echar un vistazo a la primera seguridad de API codifiqué. Te Presumimos que hay una aplicación móvil que he compartido con un $app_id y $app_secret. Se aceptan sólo API que llaman con esas teclas.

Por ejemplo, la aplicación intenta registrar su dueño, probablemente un nuevo usuario de Meeting Planner:

La aplicación llama anteriormente actionRegister  a través de https://api.meetingplanner.io/user-token/register/ con argumentos como sigue:

  • $app_id y $app_secret para la autenticación
  • $source = 'facebook' para el servicio de OAuth estamos usando y acompañando a $oauth_token de que el servicio
  • $email$firstname y $lastname proporcionada a través de OAuth

Todos aquellos son argumentos de consulta tales como:

Service::verifyAccess($app_id,$app_secret) busca las llaves para autenticar la llamada como se muestra a continuación:

Porque las claves y los datos fueron enviados a través de SSL, son bastante seguras pero no invencible. Tampoco lo es la clave secreta seguridad en los iPhones de los usuarios para algunos.

¿Cómo podemos hacer esto más seguro? Aquí están algunas ideas:

  1. No transmitir nunca la clave secreta por Internet.
  2. No transmitir los datos como parámetros de URL que puede ser que aparezca en los registros de servidor.
  3. Firmar todos los datos para verificar su exactitud.

Estas son las prácticas realmente estándar que se usan para fijar las API.

Nota: Un ejemplo del riesgo de transmisión de datos que pudieran estar expuestos en los registros de servidor sería el correo electrónico y el Facebook OAuth token. Si encontró en los registros, estos podrían utilizarse con la API de Facebook para acceder a la cuenta de Facebook de alguien.

Implementar la Mejor Seguridad de API

Usando Firmas Hash

En primer lugar, voy a dejar de transmitir la $app_secret. En cambio, firmamos los datos salientes con él antes de hacer una llamada a la API.

Tan ordenar alfabéticamente las variables y concatena en una cadena como esta:

Lo que Resulta en:

Entonces, a hash a los datos con hash_hmac de PHP y el algoritmo sha256 con nuestra clave secreta.

Building Your Startup Securing API - PHP hash_hmac docs

Esto crea un código hash único basado en los argumentos de la llamada a la API y la clave secreta compartida:

Ahora, podemos hacer una llamada a la API sin transmitir la clave secreta. En cambio, nos transmiten la firma de los datos de hash anteriores.

He estado usando a Postman para probar la API, pero también se puede utilizar cURL:

Building Your Startup Securing API - Testing the API with a signature

Aquí está el código API recepción que respondieron a la llamada anterior:

Además, he revisado la última vez, cada usuario recibe su propio token cuando tienen acceso a planificador de la reunión a través de la API, por ejemplo, mediante su teléfono móvil. Así, posteriores al registro, puede firmar llamadas con su ficha individual y no es necesario transmitir la clave secreta de la solicitud o ficha individual del usuario.

Envío de Datos en las Cabeceras HTTPS

A continuación, a migrar envío de datos en las cabeceras. Puede hacer esto fácilmente con Postman o cURL. Aquí está Postman:

Building Your Startup Securing API - Testing the API sending data in the headers

Y aquí está cURL:

Aquí está el código receptor que obtiene los datos de API de encabezados HTTPS:

En el Cierre

Comenzamos hoy con los siguientes objetivos:

  1. No transmitir nunca la clave secreta por Internet.
  2. No transmitir los datos como parámetros de URL que puede ser que aparezca en los registros de servidor.
  3. Firmar todos los datos para verificar su exactitud.

Y hemos logrado todos estos objetivos con modestos cambios en nuestro código API. Fue muy divertido hacer estos cambios y ver cómo fácilmente podemos mejor asegure una API. Espero que disfrutado siguiendo junto con el episodio de hoy.

Regularmente de supervisar los comentarios, así que por favor únase a la discusión. Usted puede también alcanzarme en Twitter @lookahead_io directamente. Y, por supuesto, para próximos tutoriales aquí en la Serie Construyendo tu Startup con PHP.

Si no antes, trate de programar una reunión en el Meeting Planner y quisiera saber lo que piensas. Agradezco especialmente a peticiones.

Enlaces Relacionados

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.