uBlock Origin, ipaddress= seçeneğini yansıtmak için CNAME uncloaking kodunu düzeltti
(github.com/gorhill)- uBlock Origin commit’i, Firefox ağ işlemede CNAME uncloaking akışını yeniden yazıyor ve DNS sorgusuyla elde edilen IP’nin
details.ipiçine yansıtılmasını sağlayacak şekilde değiştiriyor - Mevcut
cnamesMap önbelleği kaldırılıyor; yerinednsList,dnsDict,dnsWritePtrtabanlı 256 öğelik ring buffer ve60000msTTL önbelleği geliyor - DNS sorgusu
browser.dns.resolve(hn, [ 'canonical_name' ])kullanıyor; sonuçtakicanonicalNameveaddresses[0]değerleri sırasıyla CNAME ve IP olarak kullanılıyor - CNAME istisna işleme; 1st-party, ignore list ve root document koşullarını koruyor; IPv4 adresleri veya
[ile başlayan host adlarını yeniden sorgulamanın dışında bırakıyor - Chromium minimum sürümü
80.0, Opera minimum sürümü67.0seviyesine yükseliyor; gizli ayarlardakicnameMaxTTLvarsayılan değeri kaldırılıyor
Firefox DNS önbellek yapısı yeniden yazıldı
platform/firefox/vapi-background-ext.jsiçindeki CNAME uncloaking ile ilgili kod, global Map merkezli yapıdan sınıf içi DNS önbelleği yapısına dönüştü- Mevcut global
cnameUncloakEnableddurumu vecnamesMap yerine önbellek şu alanlarla yönetiliyordnsList: ring bufferdnsWritePtr: sonraki yazma konumudnsMaxCount: maksimum256dnsDict: host adından ring buffer indeksine eşlemednsEntryTTL:60000ms
- Kurucuda
canUncloakCnamesvecnameUncloakEnabledtrueolarak başlatılıyor
İstek işleme akışı
onBeforeSuspendableRequest(details), istek URL’sinden host adını çıkardıktan sonra öncednsFromCache(hn)ile önbelleği kontrol ediyor- Önbellekteki DNS kaydında
ipvarsadetails.ipiçine ayarlıyor - Temel
super.onBeforeSuspendableRequest(details)çağrısının sonucu iptal veya yönlendirme gibi bir sonuçla biterse, bu sonucu aynen döndürüyor - Önbellekteki DNS kaydı bir
Promisedeğilse, takip işlemeonAfterDNSResolution(hn, details, dnsEntry)ile devam ediyor - DNS yeniden sorgulama koşulları sağlanmıyorsa veya
details.proxyInfo?.proxyDNSvarsa ek DNS işlemi yapılmıyor
DNS sorgusu ve saklama yöntemi
dnsShouldResolve(hn), boş host adlarını,[ile başlayan host adlarını ve IPv4 adresi biçimindekileri DNS sorgusu kapsamı dışında bırakıyordnsResolve(hn, details), ring buffer’ın geçerli konumuna host adını kaydediyor vednsAPI.resolve(hn, [ 'canonical_name' ])çağrısı yapıyor- Sorgu başarılı olursa
dnsToCache(hn, rec, details)çalıştırılıyor; başarısız olursadnsToCache(hn)ile önbellekte boş bir kayıt bırakılıyor dnsToCache, yeni önbellek kaydınahnve sona erme zamanını kaydediyorcnameFromRecordbir değer döndürürsednsEntry.cnameiçine kaydediliyoripFromRecordbir değer döndürürsednsEntry.ipiçine kaydediliyor
dnsFromCache, önbellek kaydı birPromiseise aynen döndürüyor; süresi dolmuş kayıtlarıdnsListvednsDictiçinden kaldırıyor
CNAME ve IP’nin yansıtılma koşulları
cnameFromRecord(hn, record, details),record.canonicalNameyoksa veya özgün host adıyla aynıysa CNAME döndürmüyorcnameIgnore1stPartyaçıksa, CNAME ile özgün host adının alan adının aynı olduğu durumları hariç tutuyorcnameIgnoreListvarsa, ilgili regex ile eşleşmeyen CNAME’ler hariç tutuluyorcnameIgnoreRootDocumentaçıksa, istek host adıdetails.documentUrl || details.urliçindeki host adıyla aynı olduğunda hariç tutuluyoripFromRecord(record),record.addressesbir dizi olduğunda ve boş olmadığında ilk adresi, yaniaddresses[0]değerini döndürüyor
URL yeniden yazma ve sonraki filtreleme
onAfterDNSResolution, DNS kaydında CNAME varsa vecnameUncloakEnabledaçıksa URL’yiuncloakURLile yeniden yazıyor- URL değiştirilirken mevcut URL
details.aliasURLiçine kaydediliyor, yeni URL isedetails.urliçine yansıtılıyor - DNS kaydında IP varsa ve mevcut
details.ipdeğerinden farklıysadetails.ipgüncelleniyor - Yalnızca CNAME yeniden yazma veya IP değişikliği gerçekleştiğinde temel sınıfın
onBeforeSuspendableRequest(details)metodu yeniden çağrılıyor uncloakURL, URL içindeki host adı konumunu bulup CNAME ile değiştiriyor;cnameReplayFullURLdeğerine göre URL’nin tamamını birleştiriyor veya yalnızca yolun başına kadar olan kısmı koruyor
Ayar ve manifest değişiklikleri
setOptionsiçindecnameMaxTTLişlemesi kaldırılıyor- Seçenekler değiştiğinde mevcut
cnamesMap’i sıfırlamak yerinednsList.fill(null)vednsDict.clear()ile DNS önbelleği boşaltılıyor src/js/background.jsiçindeki gizli ayar varsayılanlarındancnameMaxTTL: 120siliniyorplatform/chromium/manifest.jsoniçindekiminimum_chrome_version,73.0değerinden80.0değerine değiştiriliyorplatform/opera/manifest.jsoniçindekiminimum_opera_version,60.0değerinden67.0değerine değiştiriliyor
1 yorum
Hacker News yorumları
Başlık yanlış gibi görünüyor. uBlock Origin bu özelliği zaten yıllar öncesinden destekliyordu, sadece Firefox'ta mümkündü
Bu seferki şey tamamen yeni bir özellikten ziyade o kodun refaktör edilmesi gibi görünüyor
Yine de bir alan adının birden fazla IP'si olduğunda tarayıcının hangisini seçeceğini bilmek mümkün olmadığından kusursuz değil
Daha doğru ve tarafsız bir başlık önerirseniz yeniden değiştirilebilir. Yine de ek bağlamı olmayan GitHub commit'leri genelde HN başlığı için pek iyi olmaz
Henüz doğrudan zararını görmedim ama Chrome gerçekten uBO'yu kaldırırsa, geçiş yapabilmek için uzantılarımı Firefox için şimdiden yeniden elden geçiriyorum
Birkaç sürüm içinde olacak, o yüzden hazırlıklı olmak lazım
En fazla
background.service_workeryerinebackground.scriptskullanırsın; kelimenin tam anlamıyla sadece anahtar adını değiştirmek yeterliuBlock Origin, Firefox'u daha iyi yapan şeylerden biri ve Chrome gibi alternatifler yerine Firefox kullanmamın başlıca nedenlerinden biri
İnterneti gerçekten gezilebilir hale getiriyor
10 yılı aşkın süredir bazı sitelerde görüntüleme sorunları yaşadım ama o sitelerde Chrome'da da sorun vardı
Kişisel olarak reklamları modern toplumun kanseri gibi görüyorum. Beyaz yalanlar ve düpedüz yalanlar, manipülasyonla iç içe geçmiş durumda ve işin içinde bu kadar büyük para akması, saygı duyulacak bir şey bırakmıyor
Brave de kaliteli bir proje, yedek olarak kullanıyorum; bazen pencere bölme ve çok daha iyi sekme yönetimi için Vivaldi'yi de araya katıyorum
CNAME cloaking denilen şey, reklam sitelerinin wildcard kaydını işaret eden rastgele oluşturulmuş alt alan adları kullanması mı demek?
Normalde contentsite.com'u ziyaret ettiğinizde reklamlar adsite.com'dan gelir. Reklam engelleme kuralları adsite.com'u engellerse reklam görünmez
CNAME cloaking, ana sitenin adsite.contentsite.com gibi bir alt alan adını adsite.com'a yönlendirmesi demek. Böylece reklam engelleyici, normal sitenin parçası gibi görünen milyonlarca alt alan adını engellemek gibi neredeyse imkânsız bir işle karşı karşıya kalır
Normal site alt alan adlarını durmadan değiştirebilir ve reklam engelleyicinin hangi alt alan adının normal içerik, hangisinin reklam olduğunu anlama şansı yoktur. Üstelik içerik aynı alan adından sunulduğu için bazı çerez politikaları da aşılabilir ve kullanıcı daha iyi izlenebilir
Bu güncelleme, çözümlenmiş IP'ye göre filtreleme yapan kurallar tanımlamayı mümkün kılıyor
Bu, Manifest V3'ün neden kötü olduğunu çok iyi gösteren bir örnek. Tanım gereği böyle şeyler yapamaz ve çalışma anında kod tabanlı sezgisel yöntemler de mümkün değildir
Bu, reklamcılarla süren bir silahlanma yarışı ve Google her iki tarafa da silah satan tüccar. Kullanıcının kazanması için gereken şeyi vermeyecek
Elbette bunların hepsi tarayıcı sağlayıcısının, yani Google'ın bu API'yi eklemek isteyip istememesine bağlı. “Çalışma anında kod” ile emir kipinde işlem yapılabilirse, tarayıcı üreticisi yerleşik destek eklemeden önce kullanıcı alanında yenilik yapılabilir
Dolayısıyla belirli bir özelliğin “tanım gereği” imkânsız olduğunu söylemek yanlış
[1] https://blog.mozilla.org/addons/2022/05/18/manifest-v3-in-fi...
CNAME gizleme örneğin, SaaS sağlayıcısı A'nın şirket Q'ya havalı bir reklam takip yazılımı sunmak istediğini düşünelim
Eski yöntemde A, şirket Q'nun
https://q-company.exampleadresindeki sitesine örneğin https://A-ads-tracking.example betiğini eklemesini isterdiBöylece uBlock Origin'in kullandığı engelleme listelerinde “A-ads-tracking.example alanına giden istekleri engelle” gibi kurallar oluşur ve reklamlar engellenirdi
CNAME gizleme ise SaaS sağlayıcısı A'nın reklam takip hizmetini A-ads-tracking.example alanında değil, örneğin 29.1.2.3 gibi belirli bir IP adresinde barındırmasıdır. Kritik nokta da SaaS A'nın şirket Q'dan q-company.example altında bir alt alan oluşturmasını ve onun CNAME kaydının 23.1.2.3'ü göstermesini istemesidir. Buna media.q-company.example gibi makul görünen bir ad verilir
Şirket Q bu CNAME'i ayarlayıp siteye
media.q-company.examplebetik etiketini eklediğinde, SaaS A o sitenin tüm kullanıcılarını takip edebilir. Bu ara katman nedeniyle, Q şirketinin sahibi ile herkese açık engelleme listeleri arasında fiilen sonsuz bir kedi-fare oyunu ortaya çıkarBu sorundan kaçınmak için, uBlock Origin gibi eklentileri çalıştıran yazılımın tarayıcı isteğinin hedef alanını olduğu kadar, o alanın gerçek IP adresini de görebilmesi gerekir. Bu commit de bunu mümkün kılan ya da en azından o kodun daha iyi çalışmasını sağlayan bir şeyle ilgili görünüyor
Örneğin
media.q-company.example,q-company.ads-tracking.exampleadresini gösteren bir CNAME olabilir; ardındanq-company.ads-tracking.exampleIP veren bir A kaydına sahip olurTarayıcının bu ara DNS adını eklentiye verip vermediğini bilmiyorum. Bu yüzden uBlock gibi araçların IP listelerine dayanması gerekebilir; ama pihole gibi DNS tabanlı filtreleme araçları
ads-tracking.exampleiçin bir kuralla bunu doğrudan engelleyebilirHer halükarda hem tarayıcı tabanlı hem de DNS tabanlı kötü amaçlı içerik engelleyicileri birlikte kullanmak iyi olur
Yavaş ve hata yapmaya açık bir yöntem ama alışınca kolaylaşıyor ve bu tür saçmalıklara karşı tamamen bağışıklık sağlıyor
Chrome, uBO'yu engellemeyi mi planlıyor? En güncel durumu sürekli takip edemiyorum
Bildiğim kadarıyla artık üçüncü taraf çerezlere izin veriyor, o yüzden belki hâlâ bir ihtimal vardır
uBO'nun yüklenmemesi gereken şeyleri tespit edip sonra bunların yüklenmesini durdurmak için ihtiyaç duyduğu temel API'ler ortadan kaldırılıyor
Google bunun “performans” veya “güvenlik” için olduğunu iddia ediyor. Elbette gerçekte ciddi biçimde etkilenen tek “performans” ya da “güvenlik”, zararlı veya reklamla ilgili indirmeleri başlamadan önce tespit edip araya girme ve durdurma yeteneği
https://developer.chrome.com/docs/extensions/develop/migrate...
https://www.bleepingcomputer.com/news/google/google-chrome-w...
Yalnızca Manifest V3 destekleyen bir Chromium sürümü kullanırsanız gizleniyor
Bazı DNS sunucularında, sunucunun çözdüğü CNAME gibi davranan bir özellik yok muydu? Yani yönetici başka bir DNS adını gösteren bir kayıt giriyor ama istemci sadece A veya AAAA kaydını görüyor
uBO'da bu özellik epey uzun süredir vardı. 1.34.0 sürümünden beri vardı, gelişmiş ayarlarda ise 1.25.0'dan beri
https://github.com/gorhill/uBlock/wiki/Dashboard:-Settings#u...
Kabaca 2021 civarı diye hatırlıyorum
Brave, Edge ve Opera'da uBO durumu nasıl?
https://brave.com/blog/brave-shields-manifest-v3/
Yine de şart değil. Brave'in kendi yerleşik reklam engelleyicisi oldukça güçlü; son baktığımda yerel koda derlenmişti, bu yüzden uBO'dan daha yüksek performans veriyordu ve aynı reklam listelerini de tam olarak destekliyordu