Eine Proxy-Prüfung in einer Chrome-Erweiterung braucht ein Ziel mit vorhersehbarer Antwort. Verwende einen HTTPS-Endpunkt, den du kontrollierst, etwa einen, der ein kleines JSON-Objekt mit der beobachteten Adresse zurückgibt.

Führe die Anfrage aus einem Erweiterungskontext aus, etwa dem Service Worker oder einer Erweiterungsseite, mit dem Endpunkt in den Host-Berechtigungen des Manifests:

"host_permissions": ["https://probe.example/*"]

Eine Host-Berechtigung verleiht einem Content-Skript nicht dieselben originübergreifenden Rechte. Halte die Prüfung im Erweiterungskontext, statt anzunehmen, ein injiziertes Skript könne dieselbe Anfrage stellen.

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);
  }
}

Der Hostname ist ein Platzhalter. Server und Client müssen sich auf Antwortformat und Cache-Richtlinie einigen. Behandle abgelehnte Anfragen und fehlerhafte Antworten im Aufrufer der Erweiterung, statt sie als gültige Ausgangsadresse anzuzeigen.

Die Beobachtung präzise benennen

Ein erfolgreiches Ergebnis belegt, dass diese Anfrage den Endpunkt erreicht und die erwartete Antwortform erhalten hat. Vergleiche die beobachtete Adresse mit der beabsichtigten Route, wo dieser Vergleich aussagekräftig ist. Die Lausch-IP des konfigurierten Proxys muss nicht sein öffentlicher Ausgang sein.

Eine PAC-Regel oder eine Ausnahmeliste kann die Prüfung direkt senden, während ein anderes Ziel einen Proxy nutzt. Das Lesen der Proxy-Einstellungen liefert Konfigurationsbelege; die Anfrage liefert Belege für dieses Ziel. Keines von beiden allein beweist, dass jeder Tab oder jede URL derselben Route folgt.

Halte Zeitlimit, HTTP-Fehler und unerwarteten Body in der Oberfläche getrennt. „Diese Prüfung ist fehlgeschlagen“ ist nützlicher, als nach einer Anfrage den ganzen Rechner als offline zu erklären.

Ähnliche Artikel