Одним из существенных улучшений Google Safe Browsing версии 5 по сравнению с версией 4 (в частности, API обновления версии 4 ) является актуальность и охват данных. Поскольку защита в значительной степени зависит от локальной базы данных, поддерживаемой клиентом, задержка и размер обновления локальной базы данных являются основной причиной отсутствия защиты. В версии 4 типичному клиенту требуется от 20 до 50 минут, чтобы получить самую актуальную версию списков угроз. К сожалению, фишинговые атаки распространяются быстро: по состоянию на 2021 год 60% сайтов, осуществляющих атаки, работают менее 10 минут. Наш анализ показывает, что около 25-30% случаев отсутствия защиты от фишинга связаны с такой устаревшей информацией. Кроме того, некоторые устройства не оснащены для обработки всех списков угроз Google Safe Browsing, которые со временем продолжают расти.
Если вы в настоящее время используете API обновления версии 4 , существует возможность беспрепятственной миграции с версии 4 на версию 5 без необходимости сброса или удаления локальной базы данных. В этом разделе описано, как это сделать.
Преобразование обновлений списка
В отличие от версии 4, где списки идентифицировались кортежем, состоящим из типа угрозы, типа платформы и типа записи угрозы, в версии 5 списки идентифицируются просто по имени. Это обеспечивает гибкость, когда несколько списков версии 5 могут использовать один и тот же тип угрозы. Типы платформ и типы записей угроз удалены в версии 5.
В версии 4 для загрузки списков использовался метод threatListUpdates.fetch . В версии 5 переключились на метод hashLists.batchGet .
В запрос следует внести следующие изменения:
- Объект
ClientInfoверсии 4 следует полностью удалить. Вместо указания идентификатора клиента с помощью отдельного поля, просто используйте хорошо известный заголовок User-Agent . Хотя для указания идентификатора клиента в этом заголовке нет установленного формата, мы рекомендуем просто указать исходный идентификатор клиента и версию клиента, разделенные пробелом или косой чертой. - Для каждого объекта
ListUpdateRequestверсии 4 : * Найдите соответствующее имя списка версии 5 в списке доступных списков и укажите это имя в запросе версии 5.- Удалите ненужные поля, такие как
threat_entry_typeилиplatform_type. - Поле
stateв версии 4 напрямую совместимо с полемversionsв версии 5. Та же самая байтовая строка, которая отправлялась бы на сервер с помощью поляstateв версии 4, может быть просто отправлена в версии 5 с помощью поляversions. - В версии 4 для ограничений используется упрощенная версия под названием
SizeConstraints. Дополнительные поля, такие какregion, следует удалить.
- Удалите ненужные поля, такие как
В ответ следует внести следующие изменения:
-
ResponseTypeв версии 4 просто заменено логическим полем с именемpartial_update. - Поле
minimum_wait_durationтеперь может принимать значение ноль или быть опущено. В этом случае клиенту будет предложено немедленно отправить еще один запрос. Это происходит только в том случае, если клиент указывает вSizeConstraintsограничение на максимальный размер обновления меньше, чем максимальный размер базы данных. - Для декодирования хешей, закодированных по алгоритму Райса-Голомба, требуется две основные корректировки:
- Порядок байтов и сортировка: В версии 4 возвращаемые хеши сортировались как значения с порядком байтов little-endian. В версии 5 они обрабатываются как значения с порядком байтов big-endian. Поскольку лексикографическая сортировка байтовых строк эквивалентна числовой сортировке значений big-endian, клиентам больше не нужно выполнять специальный этап сортировки. Пользовательская сортировка с порядком байтов little-endian, подобная той, что реализована в Chromium v4 , может быть удалена, если она была реализована ранее.
- Переменные длины хешей: Алгоритм декодирования необходимо обновить для поддержки различных длин хешей, которые могут быть возвращены в поле
HashList.compressed_additions, а не только четырехбайтовой длины хеша, используемой в версии 4. Длина хешей, возвращаемых в ответе, может быть определена на основеHashList.metadata.hash_length, возвращаемого функциейhashLists.list. В качестве альтернативы, имя запрошенного списка хешей также указывает на ожидаемые размеры хешей, возвращаемых из списка. Дополнительные сведения о списках хешей см. на странице «Локальная база данных» .
Преобразование хэш-поиска
В версии 4 для получения полных хешей использовался метод fullHashes.find . Эквивалентным методом в версии 5 является метод hashes.search .
В запрос следует внести следующие изменения:
- Разработайте код таким образом, чтобы он отправлял только префиксы хеша длиной ровно 4 байта.
- Полностью удалите объекты
ClientInfoверсии 4. Вместо указания идентификатора клиента с помощью отдельного поля просто используйте хорошо известный заголовок User-Agent . Хотя для указания идентификатора клиента в этом заголовке нет предписанного формата, мы предлагаем просто включить исходный идентификатор клиента и версию клиента, разделенные пробелом или косой чертой. - Удалите поле
client_states. Оно больше не нужно. - Больше нет необходимости включать поля
threat_typesи аналогичные.
В ответ следует внести следующие изменения:
- Поле
minimum_wait_durationудалено. Клиент всегда может отправить новый запрос по мере необходимости. - Объект
ThreatMatchверсии 4 был упрощен и преобразован в объектFullHash. - Кэширование упрощено и теперь включает только один период кэширования. Инструкции по взаимодействию с кэшем см. выше.