URL и хэширование
Списки Safe Browsing состоят из префиксов хэшей SHA-256 произвольной длины (от 4 до 32 байт), которые соответствуют URL интернет-ресурсов, представляющих угрозу для пользователя. Чтобы проверить наличие URL в списке (в локальной базе или на сервере), вычислите префикс хэша. Для этого:
Пример реализации на языке Golang.
Выполните поиск по локальной базе списков Safe Browsing. Если префикс хэша найден, отправьте его в запросе.
Канонический вид URL
URL должен соответствовать стандарту RFC 2396. URL в интернационализированных доменных именах (IDN), например .рф
, нужно конвертировать в ASCII методом Punycode. URL должен содержать компонент пути, то есть завершаться слешем: например, https://yandex.ru/
.
Чтобы привести URL к каноническому виду:
Удалите знаки табуляции
0x09
и перевода строки0x0d
и0x0a
.Удалите якорь. Например,
https://yandex.ru/#anchor
сократите доhttps://yandex.ru/
.Отдельно обработайте:
- Хост
-
- Удалите точки в начале и в конце.
- Замените несколько последовательных точек на одну.
- Если имя хоста — IP-адрес, приведите его в вид четырех десятичных чисел, разделенных точкой.
- Приведите к нижнему регистру.
- Путь
- Примечание. Не применяйте эти действия к параметрам запроса.
- Удалите последовательность символов
/../
и замените/./
на/
. - Замените несколько последовательных слешей на один.
- Экранируйте все ASCII-символы младше 32 и старше 127, а также
#
и%
. Используйте шестнадцатеричную запись в верхнем регистре.
Исходный URL | Канонический вид |
---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
Исходный URL | Канонический вид |
---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
Выражения для хоста и пути
- Выражения для хоста и пути.
- Комбинации этих выражений.
- Выражения для хоста
- Сформируйте не более 5 различных строк:
- Полное имя хоста.
- До 4 имен хоста, начиная с последних пяти компонент и последовательно удаляя первую компоненту. Домен верхнего уровня можно пропустить. Эти строки не нужно создавать, если имя хоста — IP-адрес.
- Выражения для пути
- Сформируйте не более 6 различных строк:
- Полный путь с параметрами запроса.
- Полный путь без параметров запроса.
- 4 пути, начиная с корня и последовательно добавляя компонент пути с закрывающим слешем.
- Комбинации
-
Сформируйте до 30 различных комбинаций выражений для хоста и пути. Эти комбинации должны включать только имя хоста и путь; схема (протокол), имя пользователя, пароль и порт нужно исключить. Если в URL есть параметры запроса, по крайней мере одна комбинация должна содержать полный путь и параметры запроса.
- Пример
- Для URL
http://a.b.c/1/2.html?param=1
нужно сформировать следующие строки:a.b.c/1/2.html?param=1 a.b.c/1/2.html a.b.c/ a.b.c/1/ b.c/1/2.html?param=1 b.c/1/2.html b.c/ b.c/1/
Для URL
http://a.b.c.d.e.f.g/1.html
нужно сформировать следующие строки:a.b.c.d.e.f.g/1.html a.b.c.d.e.f.g/ (Вариант b.c.d.e.f.g нужно пропустить, потому что используются только последние пять компонент имени хоста и полное имя хоста) c.d.e.f.g/1.html c.d.e.f.g/ d.e.f.g/1.html d.e.f.g/ e.f.g/1.html e.f.g/ f.g/1.html f.g/
Для URL
http://1.2.3.4/1/
нужно сформировать следующие строки:1.2.3.4/1/ 1.2.3.4/
Хэши
После того, как комбинации из выражений для хоста и пути сформированы, вычислите для каждой из них хэш SHA256 полной длины.
Затем вычислите префикс для каждого хэша полной длины. Префикс хэша состоит из 4–32 байт.
Примеры из стандарта FIPS-180-4:
- Хэш для строки
abc
-
- Значение хэш-функции
ba7816bf 8f01cfea 414140de 5dae2223 b00361a3 96177a9c b410ff61 f20015ad
. - 32-битный префикс
ba7816bf
.
- Хэш для строки
abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq
-
- Значение хэш-функции
ba7816bf 8f01cfea 414140de 5dae2223 b00361a3 96177a9c b410ff61 f20015ad
. - 48-битный префикс
248d6a61 d206
.