Privacy Power-Up: Uppgradering av Pin-länkar från HTTP till HTTPS

Pinterest Engineering
Pinterest Engineering

Follow

19 nov, 2019 – 4 min read

Maria de Angelis | Summer 2019 Pinterest Engineer Intern

HTTPS borde finnas överallt. Din webbplats körs sannolikt över HTTPS, vilket ger dina användare en säker, krypterad anslutning, men hur är det med alla utgående länkar? Kan du garantera att alla använder HTTPS? I det här inlägget beskriver vi de steg vi tog för att uppgradera Pin-länkar från HTTP till HTTPS med hjälp av DuckDuckGos smartare krypteringsteknik.

Varför HTTPS?

Men även om Pinterest körs helt och hållet på HTTPS är det inte slutdestinationen för de flesta användare. Som en plats för Pinners att upptäcka och göra det de älskar är Pinterest en språngbräda för att nå andra webbplatser. Som sådan har vi ett ansvar att omdirigera Pinners till HTTPS-webbplatser när vi kan, bland annat genom att uppgradera utgående Pin-länkar från HTTP till HTTPS när det är möjligt och genom att maximera andelen trafik via HTTPS.

Anledningen till att det finns någon HTTP-trafik är helt enkelt att många Pins skapades på det sättet. När en Pinner klickar på en Pin-länk skickas hon till HTTP-webbplatsen om innehållet skapades med en HTTP-URL. Men om webbplatsen stöder HTTPS vill vi skicka användaren till HTTPS-versionen i stället. Vi bestämde oss för att utföra en onlineuppgradering till HTTPS så att vi kunde maximera resultatet på alla Pinterest-ytor.

Efter att ha gjort förbättringar går nu cirka 80 % av den utgående trafiken via HTTPS, vilket är en ökning med över 30 %.

För att se till att den här ändringen inte störde viktiga mätvärden körde vi ett experiment för att släppa de här ändringarna till 1 % av användarna och jämföra dem med en likvärdig kontrollgrupp. Vi fann att det inte skedde någon förändring i benchmark Pinterest-metriker, så vi kommer att fortsätta att släppa experimentet till fler Pinterest-användare.

Figur 1: Den här Pinterest-planktonens Pins är färgkodade efter protokollet för deras länkar. HTTPS-länkar är gröna och HTTP-länkar är röda. När experimentet är aktiverat i den andra bilden blir de flesta röda Pins gröna eftersom deras länkar kan uppgraderas till HTTPS.

Smarter Encryption by DuckDuckGo

För att arbeta så effektivt som möjligt har vi integrerat DuckDuckGo’s Smarter Encryption-teknologi som automatiskt använder krypterade anslutningar till webbplatser när de är tillgängliga. DuckDuckGo passade perfekt för oss eftersom de upprätthåller en omfattande lista över uppgraderbara webbplatser, som genereras genom att jämföra HTTP- och HTTPS-versionen av en webbplats och lägga till en webbplats till HTTPS-uppgraderingslistan om de två versionerna är identiska. Vi kan sedan regelbundet hämta och ta in deras lista.

Pinterest Arkitektur

När en användare bläddrar genom sitt Pinterest-hemflöde görs en begäran om att hämta Pins i API-skiktet, som sedan anropar Apache Thrift-tjänsten PinAndBoardService, som sedan hämtar Pins från MySQL-databasen.

Figur 2: En förenklad representation av arkitekturen för hämtning av Pins. API-skiktet gör en begäran till PinAndBoardService som sedan hämtar Pin från cacheminnet eller MySQL.

Översikt

För att implementera Pin-länkkonvertering gör vi:

  1. Trigger om experimentet ska köras eller inte i API-skiktet.
  2. Om experimentet är aktiverat anropar vi en nytillagd slutpunkt i PinAndBoardService i API-skiktet.
  3. I den nya slutpunkten PinAndBoardService kontrollerar vi om en Pins URL börjar med HTTP när den hämtas från databasen eller cacheminnet, och i så fall bör den uppgraderas till HTTPS om möjligt.
  4. Kontrollera om en Pin kan uppgraderas till HTTPS genom att ta bort domänen från URL:en och kontrollera om domänen finns med i en lista över säkra domäner som tillhandahålls av DuckDuckGo’s Smarter Encryption.
  5. Gör konverteringen och uppgradera länken så att alla nedanstående tjänster får den säkra versionen.
  6. Vi valde att utföra länkkonverteringen i PinAndBoardService istället för direkt i MySQL-databasen av flera anledningar:
  7. Om vi uppgraderade en HTTP-länk till HTTPS i MySQL-skiktet och den domänen senare inte längre stödde HTTPS skulle Pin-länken gå sönder och vi skulle inte kunna spåra ändringen eftersom länken skulle ha ändrats permanent. För att lösa detta problem kunde vi ha lagrat både den gamla och den nya länken i MySQL, men det skulle ha varit mindre utrymmeseffektivt än det nuvarande tillvägagångssättet.
  8. Och även om vi måste utföra konverteringen varje gång en Pin hämtas från databasen (oavsett om den redan har uppgraderats eller inte) kan vi generellt sett undvika överflödig hämtning eftersom Pins är mycket cachade.

Nästa steg

När vi går vidare undersöker vi möjligheten att permanent uppgradera Pins till säkra HTTPS-länkar när de skapas, ett stort steg mot universell HTTPS-användning och ökad säkerhet för alla användare på vår plattform. Vi spårar också de länkar som vi för närvarande inte kan uppgradera för att eventuellt bidra till DuckDuckGo’s Smarter Encryption för att förbättra användarupplevelsen för alla användare.

Acknowledgements

Ett stort tack till Emanuele Cesena (min grymma praktikantmentor) och resten av säkerhetsteamet på Pinterest! Ett stort tack också till CoreService-, Storage & Caching- och API-grupperna för stöd och DuckDuckGo för tidig tillgång till deras Smarter Encryption-teknik.

Lämna ett svar

Din e-postadress kommer inte publiceras.