Maria de Angelis | Summer 2019 Pinterest Engineer Intern
HTTPS zou overal moeten zijn. Uw website werkt waarschijnlijk via HTTPS, waardoor uw gebruikers een veilige, versleutelde verbinding hebben, maar hoe zit het met alle uitgaande links? Kunt u garanderen dat ze allemaal HTTPS gebruiken? In dit bericht beschrijven we de stappen die we hebben genomen om Pin links te upgraden van HTTP naar HTTPS door gebruik te maken van DuckDuckGo’s Smarter Encryption technologie.
Waarom HTTPS?
Hoewel Pinterest volledig op HTTPS draait, is het niet de eindbestemming voor de meeste gebruikers. Pinterest is een plek voor pinners om te ontdekken en te doen waar ze van houden, en het is het startpunt om andere websites te bereiken. Als zodanig hebben we de verantwoordelijkheid om Pinners waar mogelijk om te leiden naar HTTPS-sites, inclusief het upgraden van uitgaande Pin-links van HTTP naar HTTPS waar mogelijk en het maximaliseren van het percentage verkeer via HTTPS.
De reden dat er HTTP-verkeer bestaat, is simpelweg dat veel Pins op die manier zijn gemaakt. Wanneer een Pinner op een Pin link klikt, zal ze worden verzonden naar de HTTP-site als de inhoud werd gemaakt met een HTTP URL. Als de site echter HTTPS ondersteunt, willen we de gebruiker in plaats daarvan naar de HTTPS-versie sturen. We besloten een online upgrade naar HTTPS uit te voeren, zodat we het resultaat op alle Pinterest-oppervlakken konden maximaliseren.
Na het aanbrengen van verbeteringen verloopt ongeveer 80% van het uitgaande verkeer nu via HTTPS, een toename van meer dan 30%.
Om er zeker van te zijn dat deze verandering niet interfereerde met belangrijke metrieken, voerden we een experiment uit om deze veranderingen vrij te geven aan 1% van de gebruikers en ze te vergelijken met een gelijkwaardige controlegroep. We vonden geen verandering in de Pinterest benchmark statistieken, dus we zullen doorgaan met het experiment uit te voeren op meer Pinterest gebruikers.
Figuur 1: De pins op dit Pinterest-bord zijn kleurgecodeerd op basis van het protocol van hun links. HTTPS-links zijn groen en HTTP-links zijn rood. Wanneer het experiment in de tweede afbeelding is ingeschakeld, worden de meeste rode Pins groen omdat hun links naar HTTPS kunnen worden opgewaardeerd.
Smarter Encryption by DuckDuckGo
Om zo efficiƫnt mogelijk te werken, integreerden we de Smarter Encryption-technologie van DuckDuckGo, die automatisch versleutelde verbindingen met websites gebruikt wanneer die beschikbaar zijn. DuckDuckGo was de perfecte keuze voor ons omdat ze een uitgebreide lijst van te upgraden sites bijhouden, gegenereerd door het vergelijken van de HTTP en HTTPS versie van een site, en het toevoegen van een site aan de HTTPS upgrade lijst als de twee versies identiek zijn. We kunnen dan regelmatig pull en ingest hun lijst.
Pinterest Architectuur
Wanneer een gebruiker scrollt door hun Pinterest home feed, wordt een verzoek om Pins op te halen gemaakt in de API-laag, die vervolgens de Apache Thrift service PinAndBoardService aanroept, die vervolgens Pins ophaalt uit de MySQL database.
Figuur 2: Een vereenvoudigde weergave van Pin fetching architectuur. De API laag doet een verzoek aan de PinAndBoardService die vervolgens de Pin ophaalt uit de cache of MySQL.
Overzicht
Om Pin link conversie te implementeren, we:
- Trigger het al dan niet uitvoeren van het experiment in de API laag.
- Als het experiment is ingeschakeld, bel een nieuw toegevoegde endpoint in PinAndBoardService in de API-laag.
- In de nieuwe PinAndBoardService endpoint, controleren of een Pin URL begint met HTTP wanneer het wordt opgehaald uit de database of cache, in welk geval het moet worden opgewaardeerd naar HTTPS indien mogelijk.
- Controleer of een Pin kan worden opgewaardeerd naar HTTPS door het strippen van het domein van de URL en controleer of het domein is opgenomen in een lijst van veilige domeinen geleverd door DuckDuckGo’s Smarter Encryption.
- Voer de conversie uit en upgrade de link, zodat alle downstream diensten de beveiligde versie zullen ontvangen.
- We kozen ervoor om de link conversie uit te voeren in PinAndBoardService in plaats van rechtstreeks in MySQL database om verschillende redenen:
- Als we een HTTP link geupgrade naar HTTPS in de MySQL laag en later dat domein niet langer HTTPS ondersteund, de Pin link zou breken en we zouden niet in staat zijn om de verandering te volgen omdat de link permanent zou zijn gewijzigd. Om dit probleem op te lossen, hadden we zowel de oude als de nieuwe links in MySQL kunnen opslaan, maar dat zou minder ruimte efficiƫnt zijn geweest dan de huidige aanpak.
- Hoewel we de conversie elke keer moeten uitvoeren als een Pin uit de database wordt opgehaald (ongeacht of hij al is opgewaardeerd), kunnen we over het algemeen overbodig ophalen vermijden omdat Pins in hoge mate in de cache staan.
Volgende stappen
Naarmate we verder gaan, onderzoeken we het permanent upgraden van spelden naar beveiligde HTTPS-links bij het aanmaken, een grote stap in de richting van universeel HTTPS-gebruik en verhoogde veiligheid voor alle gebruikers op ons platform. We houden ook de links bij die we momenteel niet kunnen upgraden om mogelijk bij te dragen aan DuckDuckGo’s Smarter Encryption om de gebruikerservaring voor alle gebruikers te verbeteren.
Acknowledgements
Grote dank aan Emanuele Cesena (mijn geweldige stagiaire mentor) en de rest van het Security team bij Pinterest! Ook grote dank aan de CoreService, Storage & Caching, en API teams voor het bieden van ondersteuning en DuckDuckGo voor het bieden van vroege toegang tot hun Smarter Encryption technologie.