Memorizza la classificazione VPN e mantieni visibile la sua età
Un'osservazione, la sua freschezza e la risposta del tuo sito invecchiano a ritmi diversi. Tenute separate, una classificazione in cache resta onesta su ciò che sa.
Una classificazione in cache risparmia una ricerca e congela l'opinione di ieri nella decisione di oggi. Il confronto reale non è cache contro nessuna cache: è un'osservazione, la sua freschezza e la risposta che il tuo sito ha scelto. Perdi il confine tra questi tre e un'ottimizzazione inizia a fare politica da sola. La riparazione è contabilità, non un feed migliore.
Tre record con tre orologi diversi
Un'osservazione è il campo che hai ricevuto, il feed da cui è arrivata e la versione del dataset che c'è dietro. La freschezza è una proprietà della voce di cache: quando è stata eseguita la ricerca, quando la voce smette di essere affidabile e se l'ultimo aggiornamento ha restituito qualcosa. La risposta è ciò che il tuo sito fa al riguardo per questa richiesta, questo account o questa azione. Sono prodotte da proprietari diversi e decadono a ritmi diversi, per questo una sola riga chiamata blocked distrugge la distinzione.
| Record | Who owns it | How long it should live | Damage when it is folded into another row |
|---|---|---|---|
| The observation | the feed's operator | until a newer dataset version replaces it | a stale lookup becomes indistinguishable from a fresh one |
| Its freshness | the application | one request's tolerance for age | a failed refresh hides behind a cache hit |
| The response | whoever owns the site policy | until that policy is reviewed | a feed outage turns into an indefinite block |
Due orologi meritano particolare attenzione. Il momento in cui è stata eseguita la tua ricerca non è il momento in cui il fornitore ha pubblicato il dataset, e chi legge la riga più tardi deve sapere da quale dei due proviene ogni valore. Imposta scadenza e aggiornamento secondo il modello di aggiornamento documentato del feed e secondo il costo dello sbaglio, mai secondo un numero preso in prestito da un altro sito.
Conserva il campo, non il verdetto
La documentazione di MaxMind sugli IP anonimi è un esempio concreto di un feed che separa VPN anonimo, fornitore di hosting, proxy pubblico e uscita Tor in campi distinti. Documenta anche che una sottorete VPN non registrata può invece comparire sotto il contrassegno di hosting. Appiattire questo in un solo booleano getta via l'unica parte che un operatore potrebbe controllare in seguito.
Nessuna delle due direzioni di inferenza è sicura. Un'etichetta di hosting non stabilisce che sia stato usato un tunnel, e l'assenza di un contrassegno VPN non stabilisce che nulla sia stato fra il client e il tuo servizio. Sono due affermazioni diverse, e un solo booleano non può esprimere nessuna delle due.
Lega la voce all'indirizzo che hai verificato
Dietro un proxy inverso, l'applicazione deve usare la gestione degli indirizzi client approvata dal deployment. Un'intestazione di inoltro fornita dal chiamante non deve mai poter selezionare la reputazione in cache di qualcun altro.
Quel guasto è insieme un bug di correttezza e di sicurezza, perché un attaccante che controlla l'intestazione può ereditare una voce affidabile o inchiodare una vittima a una cattiva. Deriva la chiave dalla connessione terminata dalla tua infrastruttura e registra quale derivazione è stata usata. Quando davanti ci sono più proxy, documenta la catena invece di fidarti della prima intestazione che sembra plausibile. Se la catena è ambigua, registra la chiave derivata e l'intestazione che hai rifiutato, perché è la seconda che chiederà una revisione dell'incidente.
L'assenza di prove non è un risultato pulito
Un timeout, una risposta malformata e un database non disponibile significano ciascuno qualcosa di diverso da una ricerca riuscita che non ha trovato nulla. Rappresentali come esiti separati e decidi in anticipo che cosa fa l'azione protetta quando non c'è alcuna prova. Una pagina di sola lettura e un'azione su un account connesso possono ragionevolmente seguire regole diverse.
Mantenere l'autenticazione normale, o chiedere una verifica supportata, è di solito una risposta migliore che trattare un'interruzione come permesso generale o come divieto per tutto il sito. Limita quanto può durare una ricerca e ferma le tempeste di aggiornamento con qualunque meccanismo supporti l'integrazione. Quando durante un'interruzione si usa un valore scaduto, etichettalo come scaduto nel punto di decisione e rendi visibile l'ultimo fallimento dell'aggiornamento, così un guasto prolungato non può passare per una voce sana. Qualunque sia la scelta, scrivila dove la politica viene applicata, non in un commento accanto alla ricerca.
La conservazione appartiene alla stessa decisione: conserva i campi che questa funzione richiede e la traccia di revisione dietro di essi, niente di più. Una cache IP non deve diventare una cronologia di navigazione.
Accetta quattro casi, inclusa una correzione
Prova un risultato fresco, un risultato scaduto, una ricerca fallita e una classificazione corretta in seguito. Ognuno esercita un ramo diverso, e solo l'ultimo mostra se una restrizione sbagliata può essere annullata.
Poi conferma che un utente comune abbia una via per chiedere una revisione dopo un blocco errato, perché il feed a volte sbaglierà e la coda fa parte del progetto. Scrivi i quattro casi nel runbook con il nome del proprietario della politica accanto. Il progetto guadagna il suo posto quando elimina le ricerche ridondanti mantenendo intatta l'incertezza e la decisione visibilmente in mano a una persona.