SafetyNet Safe Browsing API to biblioteka oparta na Usługach Google Play, która umożliwia sprawdzanie, czy adres URL został oznaczony przez Google jako znane zagrożenie.
Twoja aplikacja może używać tego interfejsu API, aby sprawdzić, czy dany adres URL został sklasyfikowany przez Google jako znane zagrożenie. Wewnętrznie SafetyNet implementuje klienta protokołu Bezpiecznego przeglądania sieci w wersji 4 opracowanego przez Google. Zarówno kod klienta, jak i protokół sieciowy v4 zostały zaprojektowane tak, aby chronić prywatność użytkowników i minimalizować zużycie baterii oraz przepustowości. Użyj tego interfejsu API, aby w pełni wykorzystać usługę Bezpieczne przeglądanie Google na Androidzie w sposób najbardziej zoptymalizowany pod kątem zasobów i bez implementowania protokołu sieciowego.
Nowa aktualizacja wersji 5 (v5) wprowadza znaczące ulepszenia w zakresie aktualności danych i prywatności dzięki zastosowaniu Oblivious HTTP.
Z tego dokumentu dowiesz się, jak używać interfejsu SafetyNet Safe Browsing Lookup API do sprawdzania adresów URL pod kątem znanych zagrożeń.
Warunki korzystania z usługi
Korzystając z interfejsu Safe Browsing API, wyrażasz zgodę na przestrzeganie Warunków korzystania z usługi. Zanim uzyskasz dostęp do interfejsu Bezpieczne przeglądanie API, przeczytaj i zrozum wszystkie obowiązujące warunki i zasady.
Żądanie i rejestrowanie klucza interfejsu Android API
Zanim zaczniesz korzystać z interfejsu Safe Browsing API, utwórz i zarejestruj klucz interfejsu Android API. Szczegółowe instrukcje znajdziesz na stronie Pierwsze kroki z Bezpiecznym przeglądaniem.
W wersji 5 ten klucz interfejsu API podajesz podczas tworzenia instancji SafeBrowsingClient.
Dodawanie zależności od interfejsu SafetyNet API
Zanim zaczniesz korzystać z interfejsu Bezpieczne przeglądanie API, dodaj do projektu interfejs SafetyNet API. Jeśli używasz Android Studio, dodaj tę zależność do pliku Gradle na poziomie aplikacji. Więcej informacji znajdziesz w artykule Ochrona przed zagrożeniami bezpieczeństwa za pomocą SafetyNet.
Inicjowanie interfejsu API
Aby korzystać z interfejsu Safe Browsing API, musisz go zainicjować, wywołując
initSafeBrowsing
i czekając na zakończenie. Poniższy fragment kodu zawiera przykład:
Kotlin
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing)
Java
Tasks.await(SafetyNet.getClient(this).initSafeBrowsing);
W wersji 5 GmsCore udostępnia klienta Bezpiecznego przeglądania. Musisz uzyskać instancję SafeBrowsingClient. Uprościliśmy interfejs API, aby zwiększyć wydajność i zmniejszyć rozmiar.
// Draft interface for the new client
public interface SafeBrowsingClient extends HasApiKey<SafeBrowsingApiOptions> {
Task<SafeBrowsingResponse> lookupUri(String uri, @ThreatType List<Integer> threatTypes, @Protocol int protocol);
Task<SupportedThreatTypesResponse> getSupportedThreatTypes();
}
Żądanie sprawdzenia adresu URL
Użyj metody lookupUri, aby sprawdzić, czy identyfikator URI stanowi zagrożenie. Musisz określić zamierzony protokół, którym może być lokalna lista zablokowanych (wersja 4) lub ochrona w czasie rzeczywistym (wersja 5) .
Wysyłanie żądania sprawdzenia adresu URL
Interfejs API jest niezależny od używanego schematu, więc możesz przekazać adres URL ze schematem lub bez niego. Na przykład oba te adresy są prawidłowe:
Kotlin
var url = "https://www.google.com"
Java
String url = "https://www.google.com";
i
Kotlin
var url = "www.google.com"
Java
String url = "www.google.com";
są prawidłowe.
Poniższy kod pokazuje, jak wysłać żądanie sprawdzenia adresu URL:
Kotlin
SafetyNet.getClient(this).lookupUri(
url,
SAFE_BROWSING_API_KEY,
SafeBrowsingThreat.TYPE_POTENTIALLY_HARMFUL_APPLICATION,
SafeBrowsingThreat.TYPE_SOCIAL_ENGINEERING
)
.addOnSuccessListener(this) { sbResponse ->
// Indicates communication with the service was successful.
// Identify any detected threats.
if (sbResponse.detectedThreats.isEmpty()) {
// No threats found.
} else {
// Threats found!
}
}
.addOnFailureListener(this) { e: Exception ->
if (e is ApiException) {
// An error with the Google Play services API contains some
// additional details.
Log.d(TAG, "Error: ${CommonStatusCodes.getStatusCodeString(e.statusCode)}")
// Note: If the status code, s.statusCode,
// is SafetyNetStatusCode.SAFE_BROWSING_API_NOT_INITIALIZED,
// you need to call initSafeBrowsing(). It means either you
// haven't called initSafeBrowsing() before or that it needs
// to be called again due to an internal error.
} else {
// A different, unknown type of error occurred.
Log.d(TAG, "Error: ${e.message}")
}
}
Java
SafetyNet.getClient(this).lookupUri(url,
SAFE_BROWSING_API_KEY,
SafeBrowsingThreat.TYPE_POTENTIALLY_HARMFUL_APPLICATION,
SafeBrowsingThreat.TYPE_SOCIAL_ENGINEERING)
.addOnSuccessListener(this,
new OnSuccessListener<SafetyNetApi.SafeBrowsingResponse>() {
@Override
public void onSuccess(SafetyNetApi.SafeBrowsingResponse sbResponse) {
// Indicates communication with the service was successful.
// Identify any detected threats.
if (sbResponse.getDetectedThreats().isEmpty()) {
// No threats found.
} else {
// Threats found!
}
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// An error occurred while communicating with the service.
if (e instanceof ApiException) {
// An error with the Google Play services API contains some
// additional details.
ApiException apiException = (ApiException) e;
Log.d(TAG, "Error: " + CommonStatusCodes
.getStatusCodeString(apiException.getStatusCode()));
// Note: If the status code, apiException.getStatusCode(),
// is SafetyNetStatusCode.SAFE_BROWSING_API_NOT_INITIALIZED,
// you need to call initSafeBrowsing(). It means either you
// haven't called initSafeBrowsing() before or that it needs
// to be called again due to an internal error.
} else {
// A different, unknown type of error occurred.
Log.d(TAG, "Error: " + e.getMessage());
}
}
});
Zaktualizowana sygnatura lookupUri przyjmuje identyfikator URI, listę typów zagrożeń i protokół.
val threatTypes = listOf(ThreatType.TYPE_SOCIAL_ENGINEERING, ThreatType.TYPE_MALWARE)
val protocol = Protocol.REAL_TIME // or Protocol.LOCAL_BLOCK_LIST
safeBrowsingClient.lookupUri(url, threatTypes, protocol)
.addOnSuccessListener { response ->
if (response.detectedThreats.isEmpty()) {
// No threats found
} else {
// Threats detected!
}
}
Odczytywanie odpowiedzi na żądanie sprawdzenia adresu URL
Używając zwróconego
SafetyNetApi.SafeBrowsingResponse
obiektu, wywołaj jego
getDetectedThreats
metodę, która zwraca listę
SafeBrowsingThreat
obiektów. Jeśli zwrócona lista jest pusta, interfejs API nie wykrył żadnych znanych zagrożeń.
Jeśli lista nie jest pusta, wywołaj
getThreatType
dla każdego elementu na liście, aby określić, które znane zagrożenia wykrył interfejs API.
Sugerowane ostrzeżenia znajdziesz w Przewodniku dla programistów korzystających z interfejsu Safe Browsing API.
Określanie typów zagrożeń, które Cię interesują
Stałe w klasie SafeBrowsingThreat zawierają obecnie obsługiwane typy zagrożeń:
| Typ zagrożenia | Definicja |
|---|---|
TYPE_POTENTIALLY_HARMFUL_APPLICATION |
Ten typ zagrożenia identyfikuje adresy URL stron, które zostały oznaczone jako zawierające potencjalnie szkodliwe aplikacje. |
TYPE_SOCIAL_ENGINEERING |
Ten typ zagrożenia identyfikuje adresy URL stron, które zostały oznaczone jako zawierające zagrożenia związane z inżynierią społeczną. |
Podczas korzystania z interfejsu API dodajesz stałe typu zagrożenia jako argumenty. Możesz dodać tyle stałych typu zagrożenia, ile wymaga Twoja aplikacja, ale możesz używać tylko stałych, które nie są oznaczone jako wycofane.
Wyłączanie sesji Bezpiecznego przeglądania
Jeśli Twoja aplikacja nie musi używać interfejsu Safe Browsing API przez dłuższy czas, sprawdź wszystkie niezbędne adresy URL w aplikacji, a następnie wyłącz sesję Bezpiecznego przeglądania za pomocą shutdownSafeBrowsing metody:
Kotlin
SafetyNet.getClient(this).shutdownSafeBrowsing()
Java
SafetyNet.getClient(this).shutdownSafeBrowsing();
Zalecamy wywołanie shutdownSafeBrowsing w metodzie onPause aktywności oraz wywołanie initSafeBrowsing w metodzie onResume aktywności. Zanim
wywołasz
lookupUri
upewnij się jednak, że initSafeBrowsing zakończyło działanie przed
wywołaniem
Dzięki temu, że sesja jest zawsze
aktualna, zmniejszasz prawdopodobieństwo wystąpienia błędów wewnętrznych w aplikacji.
Szczegóły ochrony w czasie rzeczywistym
Aktualizacja do wersji 5 wprowadza tryb ochrony w czasie rzeczywistym , który eliminuje problemy z nieaktualnymi danymi (w wersji 4 mogły one sięgać 20–50 minut). Przechodzi z protokołu domyślnie dozwolonego na protokół domyślnie sprawdzany , co zwiększa ochronę przed szybko rozprzestrzeniającymi się zagrożeniami. W trybie rzeczywistym klienci utrzymują lokalną bazę danych i globalną pamięć podręczną prawdopodobnie bezpiecznych witryn, aby zapewnić ochronę w czasie rzeczywistym z najnowszymi danymi o zagrożeniach.
Obsługiwane typy zagrożeń
Interfejs API umożliwia wybranie typów zagrożeń, które są dla Ciebie ważne. Interfejs API w wersji 5 obsługuje szerszy zakres typów zagrożeń:
| Stała typu zagrożenia | Opis |
|---|---|
| NO_THREAT | Brak zagrożenia. |
| TYPE_MALWARE | Ogólne zagrożenia związane ze złośliwym oprogramowaniem. |
| TYPE_UNWANTED_SOFTWARE | Niechciane oprogramowanie lub aplikacje. |
| TYPE_POTENTIALLY_HARMFUL_APPLICATION | Aplikacje, które mogą zaszkodzić urządzeniu lub użytkownikowi. |
| TYPE_SOCIAL_ENGINEERING | Witryny wyłudzające informacje i inne witryny wprowadzające w błąd. |
| TYPE_TRICK_TO_BILL | Strony, które nakłaniają użytkowników do wykonywania działań związanych z płatnościami. |
| TYPE_BETTER_ADS_VIOLATION | Witryny naruszające standardy Better Ads. |
| TYPE_MALWARE_OFFLINE | Złośliwe oprogramowanie offline. |
| TYPE_ABUSIVE_EXPERIENCE_VIOLATION | Naruszenia, które powodują negatywne wrażenia użytkownika. |
| TYPE_HIGH_CONFIDENCE_ALLOW_LIST | Lista dozwolonych o wysokim stopniu zaufania |
Dane zbierane przez SafetyNet Safe Browsing API
SafetyNet Safe Browsing API automatycznie zbiera te dane, gdy komunikuje się z usługą Bezpieczne przeglądanie na Androidzie:
| Dane | Opis |
|---|---|
| Aktywność w aplikacji | Zbiera prefiks skrótu adresów URL po dopasowaniu lokalnego prefiksu skrótu w celu wykrywania złośliwych adresów URL. |
SafetyNet Safe Browsing API zbiera prefiks skrótu adresów URL w celu wykrywania złośliwych adresów URL. Wersja 5 implementuje Oblivious HTTP , aby dodatkowo chronić dane użytkowników podczas tych wyszukiwań.
Dążymy do prezentowania informacji w jak najbardziej przejrzysty sposób. Jednak jako deweloper aplikacji ponosisz wyłączną odpowiedzialność za decyzje związane z sekcją Bezpieczeństwo danych w formularzu Google Play dotyczące zbierania, udostępniania i zabezpieczania danych użytkowników przez Twoją aplikację.