Кешована класифікація економить один запит і заморожує вчорашню думку в сьогоднішнє рішення. Справжнє порівняння — не кеш проти його відсутності, а спостереження, його свіжість і відповідь, яку обрав ваш сайт. Втратьте межу між цими трьома, і оптимізація почне сама творити політику. Виправлення — це облік, а не кращий потік.

Три записи з трьома різними годинниками

Спостереження — це поле, яке ви отримали, потік, з якого воно прийшло, і версія набору даних за ним. Свіжість — властивість запису кешу: коли виконувався запит, коли запису перестають довіряти і чи повернуло щось останнє оновлення. Відповідь — це те, що ваш сайт робить із цим для цього запиту, цього облікового запису чи цієї дії. Їх виробляють різні власники, і вони занепадають з різною швидкістю, тому один рядок під назвою blocked руйнує цю різницю.

RecordWho owns itHow long it should liveDamage when it is folded into another row
The observationthe feed's operatoruntil a newer dataset version replaces ita stale lookup becomes indistinguishable from a fresh one
Its freshnessthe applicationone request's tolerance for agea failed refresh hides behind a cache hit
The responsewhoever owns the site policyuntil that policy is revieweda feed outage turns into an indefinite block

Два годинники заслуговують на особливу увагу. Момент, коли виконувався ваш запит, — не момент, коли постачальник опублікував набір даних, і оператору, який читає рядок пізніше, треба знати, з якого з двох узяте кожне значення. Задавайте термін і оновлення за документованою моделлю оновлення потоку і за ціною помилки, ніколи — за числом, позиченим з іншого сайту.

Зберігайте поле, а не вирок

Документація MaxMind про анонімні IP-адреси — один конкретний приклад потоку, який розділяє анонімний VPN, хостинг-провайдера, публічний проксі та вихід Tor на окремі поля. Вона також документує, що незареєстрована підмережа VPN може натомість з'явитися під прапорцем хостингу. Згортання цього в один boolean відкидає єдину частину, яку оператор міг би згодом перевірити.

Жоден напрям висновку не є безпечним. Мітка хостингу не доводить, що використовувався тунель, а відсутність прапорця VPN не доводить, що між клієнтом і вашою послугою нічого не було. Це два різні твердження, і один boolean не може виразити жодного з них.

Прив'яжіть запис до адреси, яку ви перевірили

За зворотним проксі застосунок має використовувати обробку клієнтської адреси, схвалену розгортанням. Заголовок пересилання, наданий викликачем, ніколи не повинен дозволяти вибрати чужу кешовану репутацію.

Цей збій — водночас помилка коректності й безпеки, тому що нападник, який контролює заголовок, може успадкувати довірений запис або пришпилити жертву до поганого. Виводьте ключ із з'єднання, яке завершила ваша власна інфраструктура, і записуйте, який вивід використано. Коли попереду кілька проксі, документуйте ланцюг, а не довіряйте першому правдоподібному заголовку. Якщо ланцюг неоднозначний, залогуйте виведений ключ і відхилений заголовок, бо саме про другий запитає розбір інциденту.

Відсутність доказів — не чистий результат

Тайм-аут, спотворена відповідь і недоступна база даних означають кожен щось інше, ніж успішний запит, що ні з чим не збігся. Подавайте їх як окремі результати і заздалегідь вирішіть, що робить захищена дія, коли доказів немає взагалі. Сторінка лише для читання й дія в обліковому записі після входу можуть розумно дотримуватися різних правил.

Збереження звичайної автентифікації або прохання про підтримувану перевірку зазвичай є кращою відповіддю, ніж вважати збій загальним дозволом чи забороною для всього сайту. Обмежте, скільки може тривати запит, і зупиніть шторми оновлень тим механізмом, який підтримує інтеграція. Коли під час збою використовується застаріле значення, позначте його як застаріле в точці рішення і зробіть видимим останній збій оновлення, щоб тривала несправність не могла зійти за здоровий запис. Яким би не був вибір, запишіть його там, де застосовується політика, а не в коментарі біля запиту.

Збереження належить до того самого рішення: тримайте поля, потрібні цій функції, і слід перевірки за ними, не більше. Кеш IP не обов'язково має стати історією перегляду.

Прийміть чотири випадки, включно з виправленням

Перевірте свіжий результат, прострочений результат, невдалий запит і класифікацію, яку згодом виправили. Кожен випадок тренує іншу гілку, і лише останній показує, чи можна скасувати помилкове обмеження.

Потім переконайтеся, що звичайний користувач має шлях попросити перегляд після помилкового блокування, бо потік іноді помилятиметься, а черга є частиною дизайну. Запишіть чотири випадки в runbook поруч з іменем власника політики. Дизайн заслуговує свого місця, коли прибирає зайві запити, зберігаючи невизначеність недоторканою і рішення видимо в руках людини.

Схожі статті