Проверка на наблюдавания изходен IP от разширение за Chrome
Изпратете ограничена заявка от произхода на разширението към контролирана крайна точка и докладвайте какво всъщност доказва проверката.
Проверката на прокси в разширение за Chrome се нуждае от дестинация с предвидим отговор. Използвайте HTTPS крайна точка, която контролирате, например такава, която връща малък JSON обект с адреса, който наблюдава.
Изпълнете заявката от контекста на разширението, например от service worker или страница на разширението, като крайната точка е в host permissions на манифеста:
"host_permissions": ["https://probe.example/*"]
Разрешението за хост не дава на скрипт за съдържание същите права за достъп между произходи. Дръжте проверката в контекста на разширението, вместо да предполагате, че инжектиран скрипт може да направи същата заявка.
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);
}
}
Името на хоста е запълващо. Сървърът и клиентът трябва да се съгласуват за формата на отговора и политиката за кеширане. Обработвайте отхвърлените заявки и повредените отговори в извикващия код на разширението, вместо да ги показвате като валиден изходен адрес.
Назовавайте наблюдението точно
Успешният резултат доказва, че тази заявка е достигнала крайната точка и е получила очакваната форма на отговор. Сравнете наблюдавания адрес с маршрута, който сте предвидили, когато това сравнение има смисъл. IP адресът, на който слуша конфигурираното прокси, не е задължително публичният му изход.
Правило на PAC или списък за заобикаляне може да изпрати проверката директно, докато друга дестинация използва прокси. Четенето на настройките на проксито дава доказателство за конфигурацията; заявката дава доказателство за тази дестинация. Нито едно от двете само по себе си не доказва, че всеки раздел или URL следва същия маршрут.
Дръжте изчакването, HTTP грешката и неочакваното тяло отделни в интерфейса. „Тази проверка се провали“ е по-полезно от обявяване на цялата машина за офлайн след една заявка.