Real Time Mode

Gdy klienci zdecydują się korzystać z Bezpiecznego przeglądania Google w wersji 5 w trybie czasu rzeczywistego, będą przechowywać w lokalnej bazie danych: (i) globalną pamięć podręczną prawdopodobnie bezpiecznych witryn sformatowaną jako skróty SHA256 wyrażeń URL z sufiksem hosta i prefiksem ścieżki, (ii) zestaw list zagrożeń sformatowanych jako prefiksy skrótów SHA256 wyrażeń URL z sufiksem hosta i prefiksem ścieżki. Ogólna zasada jest taka, że gdy klient chce sprawdzić konkretny adres URL, przeprowadza lokalne sprawdzenie za pomocą globalnej pamięci podręcznej prawdopodobnie bezpiecznych witryn. Jeśli wystąpi dopasowanie, przeprowadzane jest sprawdzanie lokalnych list zagrożeń (zgodnie z procedurą opisaną w sekcji Tryb listy lokalnej). Jeśli nie ma dopasowania, klient kontynuuje sprawdzanie skrótu w czasie rzeczywistym zgodnie z poniższymi informacjami.

Oprócz lokalnej bazy danych klient będzie utrzymywać lokalną pamięć podręczną. Taka pamięć podręczna nie musi być przechowywana w pamięci trwałej i może zostać wyczyszczona w przypadku braku pamięci.

Szczegółowa specyfikacja procedury znajduje się poniżej.

Procedura sprawdzania adresów URL w czasie rzeczywistym

Ta procedura przyjmuje pojedynczy adres URL u i zwraca SAFE, UNSAFE lub UNSURE. Jeśli zwróci wartość SAFE, oznacza to, że adres URL jest uznawany przez Bezpieczne przeglądanie Google za bezpieczny. Jeśli zwraca wartość UNSAFE, adres URL jest uznawany przez Bezpieczne przeglądanie Google za potencjalnie niebezpieczny i należy podjąć odpowiednie działania, takie jak wyświetlenie ostrzeżenia dla użytkownika, przeniesienie otrzymanej wiadomości do folderu ze spamem lub wymaganie od użytkownika dodatkowego potwierdzenia przed kontynuowaniem. Jeśli zwróci wartość UNSURE, należy następnie użyć procedury trybu listy lokalnej.

  1. Niech expressions będzie listą wyrażeń przyrostków/przedrostków wygenerowanych przez adres URL u.
  2. Niech expressionHashes będzie listą, której elementami są identyfikatory SHA256 każdego wyrażenia w expressions.
  3. Za każde hashexpressionHashes:
    1. Jeśli hash znajduje się w pamięci podręcznej globalnej, zwróć UNSURE.
  4. Niech expressionHashPrefixes będzie listą, której elementami są pierwsze 4 bajty każdego hasza w expressionHashes.
  5. Za każde expressionHashPrefixexpressionHashPrefixes:
    1. Wyszukaj expressionHashPrefix w pamięci podręcznej.
    2. Jeśli wpis z pamięci podręcznej zostanie znaleziony:
      1. Sprawdza, czy bieżący czas jest późniejszy niż czas wygaśnięcia.
      2. Jeśli jest większa:
        1. Usuń znaleziony wpis z pamięci podręcznej.
        2. Kontynuuj pętlę.
      3. Jeśli nie jest większa:
        1. Usuń to urządzenie expressionHashPrefix z konta expressionHashPrefixes.
        2. Sprawdź, czy odpowiedni pełny skrót w expressionHashes znajduje się w pamięci podręcznej.
        3. Jeśli zostanie znaleziony, zwróć UNSAFE.
        4. Jeśli nie zostanie znaleziony, kontynuuj pętlę.
    3. Jeśli nie znajdziesz wpisu w pamięci podręcznej, kontynuuj pętlę.
  6. Wyślij expressionHashPrefixes na serwer Bezpiecznego przeglądania Google w wersji 5 za pomocą RPC SearchHashes lub metody REST hashes.search. Jeśli wystąpił błąd (w tym błędy sieci, błędy HTTP itp.), zwróć wartość UNSURE. W przeciwnym razie niech odpowiedź będzie wartością response otrzymaną z serwera SB, czyli listą pełnych skrótów wraz z informacjami pomocniczymi określającymi charakter zagrożenia (inżynieria społeczna, złośliwe oprogramowanie itp.) oraz czasem wygaśnięcia pamięci podręcznej expiration.
  7. Za każde fullHashresponse:
    1. Wstaw fullHash do pamięci podręcznej lokalnej wraz z expiration.
  8. Za każde fullHashresponse:
    1. Niech isFound będzie wynikiem wyszukiwania fullHashexpressionHashes.
    2. Jeśli isFound ma wartość False, kontynuuj pętlę.
    3. Jeśli isFound ma wartość PRAWDA, zwraca UNSAFE.
  9. Zwrot: SAFE.

Ten protokół określa kiedy klient wysyła wartość expressionHashPrefixes do serwera, ale celowo nie określa dokładnie jak to zrobić. Na przykład klient może wysłać wszystkie prefiksy expressionHashPrefixes w jednym żądaniu, ale może też wysłać każdy prefiks expressionHashPrefixes do serwera w osobnych żądaniach (być może równolegle). Klient może też wysyłać niepowiązane lub losowo wygenerowane prefiksy skrótów razem z prefiksami skrótów w expressionHashPrefixes, o ile liczba prefiksów skrótów wysyłanych w jednym żądaniu nie przekracza 30.