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 powinien być wszędzie. Twoja strona internetowa prawdopodobnie działa przez HTTPS, dając swoim użytkownikom bezpieczne, szyfrowane połączenie, ale co ze wszystkimi linkami wychodzącymi? Czy możesz zagwarantować, że wszystkie one używają HTTPS? W tym poście opisujemy kroki, które podjęliśmy, aby zaktualizować linki Pin z HTTP do HTTPS, wykorzystując technologię Smarter Encryption firmy DuckDuckGo.

Dlaczego HTTPS?

Pomimo że Pinterest działa w całości na HTTPS, nie jest to ostateczne miejsce docelowe dla większości użytkowników. Jako miejsce, w którym Pinnerzy odkrywają i robią to, co kochają, Pinterest jest platformą startową umożliwiającą dotarcie do innych stron internetowych. W związku z tym mamy obowiązek przekierowywania Pinnerów na strony z HTTPS, kiedy tylko możemy, w tym aktualizowanie linków wychodzących Pinów z HTTP na HTTPS, kiedy to możliwe, oraz maksymalizowanie odsetka ruchu przez HTTPS.

Powodem istnienia ruchu HTTP jest po prostu to, że wiele Pinów zostało stworzonych w ten sposób. Kiedy Pinner kliknie na Pin link, ona zostanie wysłany do strony HTTP, jeśli zawartość została utworzona z HTTP URL. Jednakże, jeśli strona obsługuje HTTPS, chcemy wysłać użytkownika do wersji HTTPS zamiast. Postanowiliśmy przeprowadzić aktualizację online do HTTPS, abyśmy mogli zmaksymalizować wynik na wszystkich powierzchniach Pinterest.

Po wprowadzeniu ulepszeń około 80% ruchu wychodzącego odbywa się teraz przez HTTPS, co stanowi wzrost o ponad 30%.

Aby upewnić się, że ta zmiana nie zakłóciła ważnych metryk, przeprowadziliśmy eksperyment, aby wypuścić te zmiany do 1% użytkowników i porównać je z równoważną grupą kontrolną. Stwierdziliśmy, że nie było żadnych zmian w benchmarkowych metrykach Pinteresta, więc będziemy kontynuować wypuszczanie eksperymentu do większej liczby użytkowników Pinteresta.

Figura 1: Piny na tej tablicy Pinterest są oznaczone kolorami według protokołu ich linków. Łącza HTTPS są zielone, a łącza HTTP są czerwone. Gdy eksperyment jest włączony na drugim obrazku, większość czerwonych pinów staje się zielona, ponieważ ich linki mogą zostać zaktualizowane do HTTPS.

Smarter Encryption by DuckDuckGo

Aby pracować tak wydajnie, jak to możliwe, zintegrowaliśmy technologię Smarter Encryption firmy DuckDuckGo, która automatycznie używa szyfrowanych połączeń ze stronami internetowymi, gdy są one dostępne. DuckDuckGo idealnie do nas pasowało, ponieważ prowadzi kompleksową listę witryn, które można aktualizować, generowaną przez porównywanie wersji HTTP i HTTPS witryny oraz dodawanie witryny do listy aktualizacji HTTPS, jeśli obie wersje są identyczne. Możemy wtedy regularnie pobierać ich listę.

Architektura Pinterest

Kiedy użytkownik przewija swój kanał domowy Pinterest, żądanie pobrania pinów jest wykonywane w warstwie API, która następnie wywołuje usługę Apache Thrift PinAndBoardService, która następnie pobiera piny z bazy danych MySQL.

Rysunek 2: Uproszczona reprezentacja architektury pobierania pinów. Warstwa API wykonuje żądanie do usługi PinAndBoardService, która następnie pobiera Pin z pamięci podręcznej lub MySQL.

Przegląd

Aby zaimplementować konwersję linku Pin, my:

  1. Zapytujemy czy uruchomić eksperyment w warstwie API.
  2. Jeśli eksperyment jest włączony, wywołaj nowo dodany punkt końcowy w PinAndBoardService w warstwie API.
  3. W nowym punkcie końcowym PinAndBoardService, sprawdź, czy adres URL Pinu zaczyna się od HTTP, gdy jest pobierany z bazy danych lub pamięci podręcznej, w którym to przypadku powinien zostać zaktualizowany do HTTPS, jeśli to możliwe.
  4. Sprawdź, czy Pin może zostać uaktualniony do HTTPS przez usunięcie domeny z adresu URL i sprawdzenie, czy domena znajduje się na liście bezpiecznych domen dostarczonych przez Smarter Encryption firmy DuckDuckGo.
  5. Wykonaj konwersję i uaktualnij łącze, aby wszystkie usługi niższego szczebla otrzymały bezpieczną wersję.
  6. Wybraliśmy wykonanie konwersji linku w PinAndBoardService zamiast bezpośrednio w bazie danych MySQL z kilku powodów:
  7. Jeśli uaktualniliśmy link HTTP do HTTPS w warstwie MySQL, a później ta domena nie obsługiwała już HTTPS, link Pin złamałby się i nie bylibyśmy w stanie śledzić zmiany, ponieważ link zostałby trwale zmodyfikowany. Aby rozwiązać ten problem, moglibyśmy przechowywać zarówno stare, jak i nowe linki w MySQL, ale byłoby to mniej wydajne niż obecne podejście.
  8. Chociaż musimy wykonać konwersję za każdym razem, gdy Pin jest pobierany z bazy danych (niezależnie od tego, czy został już zaktualizowany), możemy generalnie uniknąć nadmiarowego pobierania, ponieważ Piny są bardzo buforowane.

Następne kroki

Jak idziemy naprzód, badamy stałe uaktualnianie pinów do bezpiecznych linków HTTPS przy tworzeniu, duży krok w kierunku powszechnego stosowania HTTPS i zwiększonego bezpieczeństwa dla wszystkich użytkowników na naszej platformie. Śledzimy również linki, których nie możemy obecnie zaktualizować, aby potencjalnie przyczynić się do Smarter Encryption firmy DuckDuckGo w celu poprawy doświadczenia użytkownika dla wszystkich użytkowników.

Podziękowania

Wielkie podziękowania dla Emanuele Ceseny (mojego wspaniałego mentora stażysty) i reszty zespołu ds. bezpieczeństwa w Pinterest! Również ogromne podziękowania dla zespołów CoreService, Storage & Caching i API za zapewnienie wsparcia oraz dla DuckDuckGo za zapewnienie wczesnego dostępu do ich technologii Smarter Encryption.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.