Privacy Power-Up: Upgrading Pin Links from HTTP to HTTPS

Pinterest Engineering
Pinterest Engineering

Follow

Nov 19, 2019 – 4 min read

Maria de Angelis | Summer 2019 Pinterest Engineer Intern

HTTPS dovrebbe essere ovunque. Il tuo sito web probabilmente funziona su HTTPS, dando ai tuoi utenti una connessione sicura e criptata, ma che dire di tutti i link in uscita? Puoi garantire che usino tutti HTTPS? In questo post, descriviamo i passi che abbiamo compiuto per aggiornare i link Pin da HTTP a HTTPS sfruttando la tecnologia Smarter Encryption di DuckDuckGo.

Perché HTTPS?

Mentre Pinterest funziona interamente su HTTPS, non è la destinazione finale per la maggior parte degli utenti. Come luogo in cui i Pinners scoprono e fanno ciò che amano, Pinterest è il trampolino di lancio per raggiungere altri siti web. Come tale, abbiamo la responsabilità di reindirizzare i Pin ai siti HTTPS ogni volta che possiamo, compreso l’aggiornamento dei link dei Pin in uscita da HTTP a HTTPS quando possibile e massimizzando la percentuale di traffico attraverso HTTPS.

La ragione per cui esiste un traffico HTTP è semplicemente che molti Pin sono stati creati in quel modo. Quando un Pinner clicca su un link Pin, sarà inviato al sito HTTP se il contenuto è stato creato con un URL HTTP. Tuttavia, se il sito supporta HTTPS, vogliamo inviare l’utente alla versione HTTPS. Abbiamo deciso di eseguire un aggiornamento online a HTTPS in modo da massimizzare il risultato su tutte le superfici di Pinterest.

Dopo aver apportato i miglioramenti, circa l’80% del traffico in uscita passa ora attraverso HTTPS, un aumento di oltre il 30%.

Per assicurarci che questo cambiamento non interferisse con metriche importanti, abbiamo eseguito un esperimento per rilasciare questi cambiamenti all’1% degli utenti e confrontarli con un gruppo di controllo equivalente. Abbiamo scoperto che non c’è stato alcun cambiamento nelle metriche di riferimento di Pinterest, quindi continueremo a rilasciare l’esperimento a più utenti di Pinterest.

Figura 1: I Pins di questa board di Pinterest sono colorati in base al protocollo dei loro link. I link HTTPS sono verdi e quelli HTTP sono rossi. Quando l’esperimento è abilitato nella seconda immagine, la maggior parte dei pin rossi diventano verdi perché i loro link possono essere aggiornati a HTTPS.

Smarter Encryption by DuckDuckGo

Per lavorare nel modo più efficiente possibile, abbiamo integrato la tecnologia Smarter Encryption di DuckDuckGo che utilizza automaticamente connessioni criptate ai siti web quando disponibili. DuckDuckGo era la soluzione perfetta per noi perché mantiene una lista completa di siti aggiornabili, generata confrontando la versione HTTP e HTTPS di un sito, e aggiungendo un sito alla lista di aggiornamento HTTPS se le due versioni sono identiche. Possiamo quindi estrarre e ingerire regolarmente la loro lista.

Architettura di Pinterest

Quando un utente scorre il suo feed di Pinterest, viene fatta una richiesta di recupero dei pin nel livello API, che poi chiama il servizio PinAndBoardService di Apache Thrift, che successivamente recupera i pin dal database MySQL.

Figura 2: Una rappresentazione semplificata dell’architettura di recupero dei Pin. Il livello API fa una richiesta al PinAndBoardService che poi recupera il Pin dalla cache o da MySQL.

Panoramica

Per implementare la conversione del link Pin, noi:

  1. Attuiamo se eseguire o meno l’esperimento nel livello API.
  2. Se l’esperimento è abilitato, chiamiamo un nuovo endpoint aggiunto in PinAndBoardService nel livello API.
  3. Nel nuovo endpoint PinAndBoardService, controlliamo se l’URL di un Pin inizia con HTTP quando viene recuperato dal database o dalla cache, nel qual caso dovrebbe essere aggiornato a HTTPS se possibile.
  4. Controlla se un Pin può essere aggiornato a HTTPS rimuovendo il dominio dall’URL e controllando se il dominio è contenuto in una lista di domini sicuri forniti da Smarter Encryption di DuckDuckGo.
  5. Esegui la conversione e aggiorna il link in modo che tutti i servizi a valle ricevano la versione sicura.
  6. Abbiamo scelto di eseguire la conversione del link in PinAndBoardService invece che direttamente nel database MySQL per diversi motivi:
  7. Se aggiornassimo un link HTTP a HTTPS nel livello MySQL e in seguito quel dominio non supportasse più HTTPS, il link Pin si romperebbe e non saremmo in grado di tracciare il cambiamento poiché il link sarebbe stato modificato in modo permanente. Per risolvere questo problema, avremmo potuto memorizzare sia il vecchio che il nuovo link in MySQL, ma questo sarebbe stato meno efficiente in termini di spazio rispetto all’approccio attuale.
  8. Anche se dobbiamo eseguire la conversione ogni volta che un Pin viene recuperato dal database (indipendentemente dal fatto che sia già stato aggiornato), possiamo generalmente evitare il recupero ridondante perché i Pin sono altamente cached.

Passi successivi

Nel procedere, stiamo esplorando l’aggiornamento permanente dei Pin a collegamenti HTTPS sicuri al momento della creazione, un grande passo verso l’uso universale di HTTPS e una maggiore sicurezza per tutti gli utenti della nostra piattaforma. Stiamo anche monitorando i link che non possiamo attualmente aggiornare per contribuire potenzialmente alla Smarter Encryption di DuckDuckGo al fine di migliorare l’esperienza utente per tutti gli utenti.

Riconoscimenti

Un enorme ringraziamento a Emanuele Cesena (il mio fantastico mentore stagista) e il resto del team di sicurezza di Pinterest! Grazie anche ai team CoreService, Storage & Caching, e API per il supporto e a DuckDuckGo per aver fornito l’accesso anticipato alla loro tecnologia Smarter Encryption.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.