Privacy Power-Up : Mise à niveau des liens Pin de HTTP à HTTPS

Pinterest Engineering
Pinterest Engineering

Follow

Nov 19, 2019 – 4 min lu

Maria de Angelis | Summer 2019 Pinterest Engineer Intern

HTTPS devrait être partout. Votre site web fonctionne probablement en HTTPS, offrant à vos utilisateurs une connexion sécurisée et cryptée, mais qu’en est-il de tous les liens sortants ? Pouvez-vous garantir qu’ils utilisent tous HTTPS ? Dans ce post, nous décrivons les étapes que nous avons suivies pour mettre à niveau les liens Pin de HTTP à HTTPS en tirant parti de la technologie Smarter Encryption de DuckDuckGo.

Pourquoi HTTPS?

Bien que Pinterest fonctionne entièrement en HTTPS, ce n’est pas la destination finale pour la plupart des utilisateurs. En tant qu’endroit où les Pinners peuvent découvrir et faire ce qu’ils aiment, Pinterest est la rampe de lancement pour atteindre d’autres sites Web. En tant que tel, nous avons la responsabilité de rediriger les Pinners vers des sites HTTPS chaque fois que nous le pouvons, notamment en mettant à niveau les liens Pin sortants de HTTP à HTTPS lorsque cela est possible et en maximisant le pourcentage de trafic via HTTPS.

La raison pour laquelle tout trafic HTTP existe est simplement que de nombreux Pins ont été créés de cette façon. Lorsqu’une épingle clique sur un lien d’épinglage, elle sera envoyée sur le site HTTP si le contenu a été créé avec une URL HTTP. Toutefois, si le site prend en charge le protocole HTTPS, nous voulons envoyer l’utilisateur vers la version HTTPS. Nous avons décidé d’effectuer une mise à niveau en ligne vers HTTPS afin de maximiser le résultat sur toutes les surfaces de Pinterest.

Après avoir apporté des améliorations, environ 80 % du trafic sortant passe désormais par HTTPS, soit une augmentation de plus de 30 %.

Afin de nous assurer que ce changement n’interfère pas avec des métriques importantes, nous avons mené une expérience pour diffuser ces changements à 1 % des utilisateurs et les comparer à un groupe de contrôle équivalent. Nous avons constaté qu’il n’y avait pas de changement dans les métriques de référence de Pinterest, donc nous allons continuer à diffuser l’expérience à plus d’utilisateurs de Pinterest.

Figure 1 : Les épingles de ce tableau Pinterest sont codées par couleur selon le protocole de leurs liens. Les liens HTTPS sont verts et les liens HTTP sont rouges. Lorsque l’expérience est activée dans la deuxième image, la plupart des Pins rouges deviennent verts car leurs liens peuvent être mis à niveau vers HTTPS.

Smarter Encryption by DuckDuckGo

Pour travailler aussi efficacement que possible, nous avons intégré la technologie Smarter Encryption de DuckDuckGo qui utilise automatiquement des connexions cryptées aux sites Web lorsqu’elles sont disponibles. DuckDuckGo nous convenait parfaitement, car il tient à jour une liste complète de sites pouvant être mis à niveau, générée en comparant la version HTTP et HTTPS d’un site, et en ajoutant un site à la liste de mise à niveau HTTPS si les deux versions sont identiques. Nous pouvons alors régulièrement tirer et ingérer leur liste.

Architecture de Pinterest

Lorsqu’un utilisateur fait défiler son flux d’accueil Pinterest, une requête pour récupérer les Pins est effectuée dans la couche API, qui appelle ensuite le service Apache Thrift PinAndBoardService, qui récupère ensuite les Pins dans la base de données MySQL.

Figure 2 : Une représentation simplifiée de l’architecture de récupération des Pin. La couche API fait une requête au PinAndBoardService qui va ensuite chercher le Pin dans le cache ou dans MySQL.

Overview

Pour mettre en œuvre la conversion des liens Pin, nous :

  1. Déclencher l’exécution ou non de l’expérience dans la couche API.
  2. Si l’expérience est activée, appeler un endpoint nouvellement ajouté dans PinAndBoardService dans la couche API.
  3. Dans le nouvel endpoint PinAndBoardService, vérifier si l’URL d’un Pin commence par HTTP lorsqu’il est récupéré de la base de données ou du cache, auquel cas il doit être mis à niveau vers HTTPS si possible.
  4. Vérifier si un Pin peut être mis à niveau vers HTTPS en supprimant le domaine de l’URL et en vérifiant si le domaine est contenu dans une liste de domaines sécurisés fournie par Smarter Encryption de DuckDuckGo.
  5. Préparer la conversion et mettre à niveau le lien afin que tous les services en aval reçoivent la version sécurisée.
  6. Nous avons choisi d’effectuer la conversion du lien dans PinAndBoardService plutôt que directement dans la base de données MySQL pour plusieurs raisons :
  7. Si nous mettions à niveau un lien HTTP en HTTPS dans la couche MySQL et que, plus tard, ce domaine ne prenait plus en charge le HTTPS, le lien Pin se briserait et nous ne serions pas en mesure de suivre le changement puisque le lien aurait été modifié de façon permanente. Pour résoudre ce problème, nous aurions pu stocker les anciens et les nouveaux liens dans MySQL, mais cela aurait été moins efficace en termes d’espace que l’approche actuelle.
  8. Bien que nous devions effectuer la conversion chaque fois qu’un Pin est récupéré dans la base de données (indépendamment du fait qu’il ait déjà été mis à jour), nous pouvons généralement éviter les récupérations redondantes car les Pins sont fortement mis en cache.

Prochaines étapes

A mesure que nous avançons, nous explorons la possibilité de mettre à niveau de façon permanente les Pins en liens HTTPS sécurisés dès leur création, un grand pas vers l’utilisation universelle du HTTPS et une sécurité accrue pour tous les utilisateurs de notre plateforme. Nous suivons également les liens que nous ne pouvons pas actuellement mettre à niveau pour contribuer potentiellement au chiffrement plus intelligent de DuckDuckGo afin d’améliorer l’expérience utilisateur pour tous les utilisateurs.

Reconnaissance

Enorme merci à Emanuele Cesena (mon génial mentor de stage) et au reste de l’équipe de sécurité de Pinterest ! Merci également aux équipes CoreService, Storage & Caching, et API pour leur soutien et à DuckDuckGo pour avoir fourni un accès anticipé à leur technologie Smarter Encryption.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.