Почему список исключений не хешируется
Кто строит свой сайт, открывает его двадцать раз на дню. У счётчика с сорока посетителями в месяц половина статистики — это вы. Поэтому есть настройка: не считать посещения с моего собственного адреса.
Везде в этой службе адреса хешируются с тайной солью и датой, и сам адрес до хранилища не доходит никогда. В этом одном месте он лежит так, как вы его набрали, открытым текстом. Это осознанное решение, и его стоит сказать вслух, а не оставить на обнаружение.
Версия, которую попробовали первой
Первая реализация хранила контрольную сумму адреса, в согласии со всем остальным. Она работала, хранила меньше и была почти бесполезна: большинство домашних подключений получает новый адрес каждый день. Исключение было верным в момент установки и ничего не стоило на следующее утро.
Что переживает ежедневную смену — это диапазон: обычно /24 или /16 провайдера, который остаётся тем же, пока последняя часть крутится. А диапазон нельзя сравнить как контрольную сумму. Хеширование намеренно уничтожает порядок, а «лежит ли этот адрес в этом диапазоне» — вопрос о порядке. Хитрого обхода нет; два требования смотрят в противоположные стороны.
Поэтому диапазон лежит так, как введён, нормализованным, рядом с двумя своими границами по шестнадцать байт каждая, и решает единственный BETWEEN. IPv4 записывается в его виде IPv6, чтобы обе семьи были одной ширины и одно сравнение покрывало обе.
Почему этот обмен здесь приемлем
Хранится собственная сеть владельца, им же введённая, ему же показанная и им же в любой момент удаляемая. Это не адрес посетителя. Политика приватности говорит то же самое теми же словами, потому что альтернатива — описать службу как хеширующую всё и тихо сделать здесь исключение — была бы тем сортом верного в общих чертах утверждения, которое стоит меньше, чем никакого.
Предел — десять записей на счётчик: достаточно для дома, офиса и мобильной сети, мало настолько, чтобы список не мог стать общим хранилищем адресов.
Второй вид, для того, что движется
У части потока постоянная личность и непостоянный адрес: собственный сторож доступности, забиральщик предпросмотра у мессенджера, проверяющая служба. Диапазоном их не взять.
Для них исключение сравнивает кусок строки браузера. Вписав uptimerobot, вы ловите всю строку, которую он шлёт. Минимум — четыре знака, потому что двухбуквенный кусок стоял бы почти в каждой строке и выключил бы счётчик целиком.
Общий вывод
Замысел приватности — это набор обменов, и интересны те места, где правилу пришлось согнуться. Правила, которые не гнутся никогда, обычно значат, что их ещё никто не прикладывал к настоящему требованию.
Избегать надо сгибания втихую. Хешированное поле, которое на деле не хешировано, а в документации описано так, будто хешировано, хуже открытого поля, описанного открыто: оно тратит доверие, которого не заработало, и однажды его найдёт тот, кто не ожидал, что придётся проверять.