Перевірка спостережуваної вихідної IP з розширення Chrome
Надішліть обмежений запит з джерела розширення до контрольованої кінцевої точки та повідомте, що саме доводить перевірка.
Перевірці проксі в розширенні Chrome потрібен пункт призначення з передбачуваною відповіддю. Використовуйте HTTPS-кінцеву точку, яку контролюєте ви, наприклад таку, що повертає невеликий об'єкт JSON з адресою, яку вона бачить.
Виконайте запит з контексту розширення, наприклад з його service worker або сторінки розширення, вказавши кінцеву точку в host permissions маніфесту:
"host_permissions": ["https://probe.example/*"]
Дозвіл хоста не дає content script тих самих прав між джерелами. Тримайте перевірку в контексті розширення, а не припускайте, що впроваджений скрипт може надіслати той самий запит.
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 і неочікуване тіло. «Ця перевірка не вдалася» корисніше, ніж оголошувати всю машину офлайн після одного запиту.