Activación de la privacidad: Actualización de enlaces de pines de HTTP a HTTPS

Ingeniería de Pinterest
Ingeniería de Pinterest

Follow

19 de noviembre, 2019 – 4 min read

Maria de Angelis | Summer 2019 Pinterest Engineer Intern

HTTPS debería estar en todas partes. Es probable que tu sitio web funcione con HTTPS, dando a tus usuarios una conexión segura y encriptada, pero ¿qué pasa con todos los enlaces salientes? ¿Puede garantizar que todos ellos utilizan HTTPS? En este post, describimos los pasos que tomamos para actualizar los enlaces de Pin de HTTP a HTTPS aprovechando la tecnología Smarter Encryption de DuckDuckGo.

¿Por qué HTTPS?

Aunque Pinterest funciona completamente en HTTPS, no es el destino final para la mayoría de los usuarios. Como lugar para que los Pinners descubran y hagan lo que les gusta, Pinterest es la plataforma de lanzamiento para llegar a otros sitios web. Como tal, tenemos la responsabilidad de redirigir a los Pinners a sitios HTTPS siempre que podamos, incluyendo la actualización de los enlaces de Pin salientes de HTTP a HTTPS cuando sea posible y maximizando el porcentaje de tráfico a través de HTTPS.

La razón por la que existe cualquier tráfico HTTP es simplemente que muchos Pins fueron creados de esa manera. Cuando un Pinner hace clic en el enlace de un Pin, será enviado al sitio HTTP si el contenido fue creado con una URL HTTP. Sin embargo, si el sitio soporta HTTPS, queremos enviar al usuario a la versión HTTPS en su lugar. Decidimos realizar una actualización en línea a HTTPS para poder maximizar el resultado en todas las superficies de Pinterest.

Después de realizar las mejoras, alrededor del 80% del tráfico saliente es ahora a través de HTTPS, un aumento de más del 30%.

Para asegurarnos de que este cambio no interfería con las métricas importantes, realizamos un experimento para liberar estos cambios al 1% de los usuarios y compararlos con un grupo de control equivalente. Encontramos que no hubo ningún cambio en las métricas de referencia de Pinterest, por lo que continuaremos liberando el experimento a más usuarios de Pinterest.

Figura 1: Los Pines de este tablero de Pinterest están codificados por colores según el protocolo de sus enlaces. Los enlaces HTTPS son verdes y los HTTP son rojos. Cuando se activa el experimento en la segunda imagen, la mayoría de los Pines rojos se vuelven verdes porque sus enlaces pueden pasar a HTTPS.

Smarter Encryption de DuckDuckGo

Para trabajar de la forma más eficiente posible, integramos la tecnología Smarter Encryption de DuckDuckGo, que utiliza automáticamente conexiones cifradas a los sitios web cuando están disponibles. DuckDuckGo era la opción perfecta para nosotros porque mantiene una lista completa de sitios actualizables, generada mediante la comparación de la versión HTTP y HTTPS de un sitio, y añadiendo un sitio a la lista de actualización HTTPS si las dos versiones son idénticas. Cuando un usuario se desplaza a través de su feed de Pinterest, se realiza una solicitud para obtener pines en la capa de la API, que luego llama al servicio PinAndBoardService de Apache Thrift, que posteriormente obtiene pines de la base de datos MySQL.

Figura 2: Representación simplificada de la arquitectura de obtención de pines. La capa de la API hace una petición al PinAndBoardService que luego obtiene el Pin de la caché o de MySQL.

Overview

Para implementar la conversión de enlaces de Pin, nosotros:

  1. Ejecutamos o no el experimento en la capa de la API.
  2. Si el experimento está habilitado, llamar a un endpoint recién añadido en PinAndBoardService en la capa de la API.
  3. En el nuevo endpoint de PinAndBoardService, comprobar si la URL de un Pin empieza por HTTP cuando se obtiene de la base de datos o de la caché, en cuyo caso debe actualizarse a HTTPS si es posible.
  4. Comprueba si un Pin puede actualizarse a HTTPS eliminando el dominio de la URL y comprobando si el dominio está contenido en una lista de dominios seguros proporcionada por Smarter Encryption de DuckDuckGo.
  5. Realiza la conversión y actualiza el enlace para que todos los servicios posteriores reciban la versión segura.
  6. Elegimos realizar la conversión del enlace en PinAndBoardService en lugar de hacerlo directamente en la base de datos MySQL por varias razones:
  7. Si actualizábamos un enlace HTTP a HTTPS en la capa de MySQL y más tarde ese dominio dejaba de soportar HTTPS, el enlace Pin se rompería y no podríamos rastrear el cambio ya que el enlace se habría modificado permanentemente. Para resolver este problema, podríamos haber almacenado tanto los enlaces antiguos como los nuevos en MySQL, pero eso habría sido menos eficiente en términos de espacio que el enfoque actual.
  8. Aunque tenemos que realizar la conversión cada vez que un Pin se obtiene de la base de datos (independientemente de si ya ha sido actualizado), generalmente podemos evitar la obtención redundante porque los Pins son altamente cacheados.

Próximos pasos

A medida que avanzamos, estamos explorando la posibilidad de actualizar permanentemente los Pines a enlaces seguros HTTPS en el momento de su creación, un gran paso hacia el uso universal de HTTPS y una mayor seguridad para todos los usuarios de nuestra plataforma. También estamos rastreando los enlaces que no podemos actualizar actualmente para contribuir potencialmente a la encriptación más inteligente de DuckDuckGo con el fin de mejorar la experiencia del usuario para todos los usuarios.

Agradecimientos

¡Enorme agradecimiento a Emanuele Cesena (mi increíble mentor de prácticas) y al resto del equipo de seguridad de Pinterest! También gracias a los equipos de CoreService, Storage & Caching, y API por proporcionar apoyo y a DuckDuckGo por proporcionar acceso temprano a su tecnología Smarter Encryption.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.