Chrome uzantısından gözlemlenen çıkış IP'sini doğrulayın
Uzantının kaynağından denetlenen bir uç noktaya sınırlı bir istek gönderin ve doğrulamanın gerçekte neyi kanıtladığını bildirin.
Chrome uzantısındaki bir proxy doğrulaması, yanıtı öngörülebilir bir hedefe ihtiyaç duyar. Denetlediğiniz bir HTTPS uç noktası kullanın; örneğin gördüğü adresi içeren küçük bir JSON nesnesi döndüren bir uç nokta.
İsteği uzantı bağlamından, örneğin service worker'ından veya uzantı sayfasından çalıştırın ve uç noktayı manifestin host permissions bölümüne koyun:
"host_permissions": ["https://probe.example/*"]
Ana makine izni bir content script'e aynı kaynaklar arası ayrıcalıkları vermez. Doğrulamayı uzantı bağlamında tutun, enjekte edilmiş bir betiğin aynı isteği yapabileceğini varsaymayın.
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);
}
}
Ana makine adı bir yer tutucudur. Sunucu ve istemci yanıt biçimi ile önbellek politikası üzerinde anlaşmalıdır. Reddedilen istekleri ve bozuk yanıtları uzantının çağıranında ele alın, geçerli bir çıkış adresi olarak göstermeyin.
Gözlemi doğru adlandırın
Başarılı bir sonuç, bu isteğin uç noktaya ulaştığını ve beklenen biçimde yanıt aldığını kanıtlar. Karşılaştırmanın anlamlı olduğu yerde gözlenen adresi amaçladığınız yolla karşılaştırın. Yapılandırılmış proxy'nin dinlediği IP, onun genel çıkışı olmak zorunda değildir.
Bir PAC kuralı veya atlama listesi, başka bir hedef proxy kullanırken doğrulamayı doğrudan gönderebilir. Proxy ayarlarını okumak yapılandırma kanıtı sağlar; istek bu hedef için kanıt sağlar. Hiçbiri tek başına her sekmenin veya URL'nin aynı yolu izlediğini kanıtlamaz.
Zaman aşımını, HTTP hatasını ve beklenmeyen gövdeyi arayüzde ayrı tutun. Tek bir istekten sonra tüm makineyi çevrimdışı ilan etmektense «bu doğrulama başarısız oldu» demek daha yararlıdır.