Verifica l'IP di uscita osservato da un'estensione Chrome
Invia una richiesta limitata dall'origine dell'estensione a un endpoint controllato e riferisci cosa dimostra davvero la sonda.
Una sonda proxy in un'estensione Chrome ha bisogno di una destinazione con una risposta prevedibile. Usa un endpoint HTTPS che controlli, ad esempio uno che restituisce un piccolo oggetto JSON con l'indirizzo che osserva.
Esegui la richiesta da un contesto dell'estensione, come il suo service worker o una pagina dell'estensione, con l'endpoint negli host permissions del manifest:
"host_permissions": ["https://probe.example/*"]
Un'autorizzazione host non conferisce a un content script gli stessi privilegi tra origini. Mantieni la sonda nel contesto dell'estensione invece di presumere che uno script iniettato possa fare la stessa richiesta.
async function probe() {
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 5000);
try {
const response = await fetch('https://probe.example/ip', {
cache: 'no-store',
signal: controller.signal,
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const result = await response.json();
if (typeof result.ip !== 'string') throw new Error('Bad probe body');
return result.ip;
} finally {
clearTimeout(timer);
}
}
Il nome host è un segnaposto. Il server e il client devono concordare il formato della risposta e la politica di cache. Gestisci le richieste rifiutate e le risposte malformate nel chiamante dell'estensione invece di mostrarle come un indirizzo di uscita valido.
Dai un nome preciso all'osservazione
Un esito positivo dimostra che questa richiesta ha raggiunto l'endpoint e ha ricevuto la forma di risposta attesa. Confronta l'indirizzo osservato con il percorso previsto, dove il confronto ha senso. L'IP in ascolto del proxy configurato non deve necessariamente essere la sua uscita pubblica.
Una regola PAC o un elenco di esclusione può inviare la sonda direttamente mentre un'altra destinazione usa un proxy. Leggere le impostazioni del proxy fornisce una prova della configurazione; la richiesta fornisce una prova per questa destinazione. Nessuna delle due da sola dimostra che ogni scheda o URL segua lo stesso percorso.
Tieni separati nell'interfaccia timeout, errore HTTP e corpo inatteso. «Questa sonda non è riuscita» è più utile che dichiarare l'intera macchina offline dopo una sola richiesta.