Privatliv opstart: Opgradering af Pin Links fra HTTP til HTTPS

Pinterest Engineering
Pinterest Engineering

Follow

19. nov, 2019 – 4 min read

Maria de Angelis | Summer 2019 Pinterest Engineer Intern

HTTPS bør være overalt. Dit websted kører sandsynligvis over HTTPS, hvilket giver dine brugere en sikker, krypteret forbindelse, men hvad med alle de udgående links? Kan du garantere, at de alle bruger HTTPS? I dette indlæg beskriver vi de trin, vi tog for at opgradere Pin-links fra HTTP til HTTPS ved at udnytte DuckDuckGos smartere krypteringsteknologi.

Hvorfor HTTPS?

Selv om Pinterest kører helt på HTTPS, er det ikke den endelige destination for de fleste brugere. Som et sted, hvor Pinners kan opdage og gøre det, de elsker, er Pinterest startskuddet til at nå andre websteder. Som sådan har vi et ansvar for at omdirigere Pinners til HTTPS-websteder, når vi kan, herunder opgradering af udgående Pin-links fra HTTP til HTTPS, når det er muligt, og maksimering af procentdelen af trafik via HTTPS.

Grunden til, at der findes nogen HTTP-trafik, er simpelthen, at mange Pins blev oprettet på den måde. Når en Pinner klikker på et Pin-link, bliver hun sendt til HTTP-webstedet, hvis indholdet blev oprettet med en HTTP-URL. Men hvis webstedet understøtter HTTPS, ønsker vi at sende brugeren til HTTPS-versionen i stedet. Vi besluttede at foretage en onlineopgradering til HTTPS, så vi kunne maksimere resultatet på alle Pinterest-overflader.

Når vi har foretaget forbedringer, går ca. 80 % af den udgående trafik nu via HTTPS, hvilket er en stigning på over 30 %.

For at sikre, at denne ændring ikke forstyrrede vigtige målinger, gennemførte vi et eksperiment for at frigive disse ændringer til 1 % af brugerne og sammenligne dem med en tilsvarende kontrolgruppe. Vi fandt, at der ikke var nogen ændring i benchmark-pinterestmetrikker, så vi vil fortsætte med at frigive eksperimentet til flere Pinterest-brugere.

Figur 1: Denne Pinterest-board’s Pins er farvekodet efter protokollen for deres links. HTTPS-link er grønne, og HTTP-link er røde. Når eksperimentet er aktiveret i det andet billede, bliver de fleste røde Pins grønne, fordi deres links kan opgraderes til HTTPS.

Smarter Encryption by DuckDuckGo

For at arbejde så effektivt som muligt har vi integreret DuckDuckGos Smarter Encryption-teknologi, som automatisk bruger krypterede forbindelser til websteder, når de er tilgængelige. DuckDuckGo passede perfekt til os, fordi de vedligeholder en omfattende liste over opgraderbare websteder, der genereres ved at sammenligne HTTP- og HTTPS-versionen af et websted og tilføje et websted til HTTPS-opgraderingslisten, hvis de to versioner er identiske. Vi kan derefter regelmæssigt trække og indhente deres liste.

Pinterest-arkitektur

Når en bruger scroller gennem sit Pinterest-hjemfeed, foretages en anmodning om at hente Pins i API-laget, som derefter kalder Apache Thrift-tjenesten PinAndBoardService, som efterfølgende henter Pins fra MySQL-databasen.

Figur 2: En forenklet repræsentation af arkitekturen for hentning af Pins. API-laget foretager en anmodning til PinAndBoardService, som derefter henter Pin’en fra cachen eller MySQL.

Overblik

For at implementere Pin-link-konvertering skal vi:

  1. Trigger, om eksperimentet skal køres eller ej i API-laget.
  2. Hvis eksperimentet er aktiveret, kalder vi et nyligt tilføjet endepunkt i PinAndBoardService i API-laget.
  3. I det nye endepunkt i PinAndBoardService kontrollerer vi, om en pins URL begynder med HTTP, når den hentes fra databasen eller cachen, i hvilket tilfælde den om muligt skal opgraderes til HTTPS.
  4. Kontroller, om en Pin kan opgraderes til HTTPS ved at fjerne domænet fra URL’en og kontrollere, om domænet er indeholdt i en liste over sikre domæner, der leveres af DuckDuckGo’s Smarter Encryption.
  5. Udfør konverteringen, og opgrader linket, så alle efterfølgende tjenester modtager den sikre version.
  6. Vi valgte at udføre linkkonverteringen i PinAndBoardService i stedet for direkte i MySQL-databasen af flere grunde:
  7. Hvis vi opgraderede et HTTP-link til HTTPS i MySQL-laget, og det pågældende domæne senere ikke længere understøttede HTTPS, ville Pin-linket gå i stykker, og vi ville ikke kunne spore ændringen, da linket ville være blevet permanent ændret. For at løse dette problem kunne vi have gemt både det gamle og det nye link i MySQL, men det ville have været mindre pladseffektivt end den nuværende fremgangsmåde.
  8. Og selv om vi skal foretage konverteringen, hver gang en Pin hentes fra databasen (uanset om den allerede er blevet opgraderet), kan vi generelt undgå redundant hentning, fordi Pins er meget cachede.

Næste skridt

Når vi går videre, undersøger vi permanent at opgradere Pins til sikre HTTPS-link ved oprettelsen, hvilket er et stort skridt i retning af universel HTTPS-brug og øget sikkerhed for alle brugere på vores platform. Vi sporer også de links, som vi i øjeblikket ikke kan opgradere, for potentielt at bidrage til DuckDuckGo’s smartere kryptering for at forbedre brugeroplevelsen for alle brugere.

Anerkendelser

Enorm tak til Emanuele Cesena (min fantastiske praktikantmentor) og resten af sikkerhedsteamet hos Pinterest! Også stor tak til CoreService-, Storage & Caching- og API-holdene for at yde støtte og DuckDuckGo for at give tidlig adgang til deres Smarter Encryption-teknologi.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.