Manifest V3'te güvenliği artırma
Bu, uzantı hizmet çalışanı kapsamında olmayan kod için gereken değişiklikleri açıklayan üç bölümden sonuncusudur. Uzantıların güvenliğini artırmak için gereken değişiklikler açıklanır. Diğer iki bölümde ise Manifest V3'e yükseltmek için gereken kodunuzu güncelleme ve engelleyici web isteklerini değiştirme konuları ele alınmaktadır.
Rastgele dizelerin yürütülmesini kaldırma
Artık executeScript(), eval() ve new Function() kullanarak harici mantık yürütemezsiniz.
- Tüm harici kodu (JS, Wasm, CSS) uzantı paketinize taşıyın.
- Kaynakları uzantı paketinden yüklemek için komut dosyası ve stil referanslarını güncelleyin.
- Çalışma zamanında kaynak URL'leri oluşturmak için
chrome.runtime.getURL()kullanın. - Korumalı alana alınmış bir iframe kullanın:
evalvenew Function(...), korumalı alana alınmış iframe'lerde hâlâ desteklenmektedir. Daha fazla bilgi için korumalı alanlı iFrame'ler hakkındaki kılavuzu okuyun.
executeScript() yöntemi artık tabs ad alanı yerine scripting ad alanında yer alıyor. Görüşmeleri güncelleme hakkında bilgi edinmek için Taşıma executeScript() başlıklı makaleyi inceleyin.
Rastgele dizelerin yürütülmesinin hâlâ mümkün olduğu birkaç özel durum vardır:
- insertCSS kullanarak uzaktan barındırılan stil sayfalarını bir web sayfasına yerleştirme
chrome.devtoolskullanan uzantılar için: inspectWindow.eval, incelenen sayfa bağlamında JavaScript'in yürütülmesine olanak tanır.- Hata ayıklayıcı uzantıları, hata ayıklama hedefinde JavaScript'i yürütmek için chrome.debugger.sendCommand'ı kullanabilir.
Uzaktan barındırılan kodu kaldırma
Manifest V3'te uzantınızın tüm mantığı, uzantı paketinin bir parçası olmalıdır. Chrome Web Mağazası politikası uyarınca artık uzaktan barındırılan dosyaları yükleyip çalıştıramazsınız. Örnekler:
- Geliştiricinin sunucusundan çekilen JavaScript dosyaları.
- CDN'de barındırılan tüm kitaplıklar.
- Uzakta barındırılan kodu dinamik olarak getiren paketlenmiş üçüncü taraf kitaplıkları.
Kullanım alanınıza ve uzaktan barındırmanın nedenine bağlı olarak alternatif yaklaşımlar mevcuttur. Bu bölümde, dikkate alınması gereken yaklaşımlar açıklanmaktadır. Uzaktan barındırılan kodla ilgili sorun yaşıyorsanız rehberliğimizden yararlanabilirsiniz.
Yapılandırmaya dayalı özellikler ve mantık
Uzantınız, çalışma zamanında uzak bir yapılandırmayı (ör. JSON dosyası) yükleyip önbelleğe alıyor. Önbelleğe alınan yapılandırma, hangi özelliklerin etkinleştirileceğini belirler.
Uzak hizmetle haricileştirilmiş mantık
Uzantınız uzak bir web hizmetini çağırıyor. Bu sayede, Chrome Web Mağazası'na yeniden gönderme gibi ek yüklerden kaçınırken kodu gizli tutabilir ve gerektiğinde değiştirebilirsiniz.
Korumalı alana alınmış bir iframe'e uzaktan barındırılan kod yerleştirme
Uzaktan barındırılan kod korumalı alana alınmış iframe'lerde desteklenir. Kodun yerleştirme sayfasının DOM'una erişmesi gerekiyorsa bu yaklaşımın işe yaramayacağını lütfen unutmayın.
Üçüncü taraf kitaplıklarını paketleme
Daha önce harici bir sunucudan yüklediğiniz React veya Bootstrap gibi popüler bir çerçeve kullanıyorsanız küçültülmüş dosyaları indirebilir, projenize ekleyebilir ve yerel olarak içe aktarabilirsiniz. Örneğin:
<script src="./react-dom.production.min.js"></script>
<link href="./bootstrap.min.css" rel="stylesheet">
Bir kitaplığı hizmet çalışanı'na dahil etmek için manifest dosyasında "background.type" anahtarını "module" olarak ayarlayın ve import ifadesini kullanın.
Sekmeye yerleştirilmiş komut dosyalarında harici kitaplıkları kullanma
Ayrıca, scripting.executeScript() çağrılırken files dizisine ekleyerek harici kitaplıkları çalışma zamanında yükleyebilirsiniz. Çalışma zamanında verileri uzaktan yüklemeye devam edebilirsiniz.
chrome.scripting.executeScript({
target: {tabId: tab.id},
files: ['jquery-min.js', 'content-script.js']
});
İşlev ekleme
Daha fazla dinamizme ihtiyacınız varsa scripting.executeScript() içindeki yeni func özelliği, bir işlevi içerik komut dosyası olarak yerleştirmenize ve args özelliğini kullanarak değişkenleri iletmenize olanak tanır.
let name = 'World!'; chrome.tabs.executeScript({ code: `alert('Hello, ${name}!')` });
Arka plan komut dosyası içinde.
async function getCurrentTab() {/* ... */} let tab = await getCurrentTab(); function showAlert(givenName) { alert(`Hello, ${givenName}`); } let name = 'World'; chrome.scripting.executeScript({ target: {tabId: tab.id}, func: showAlert, args: [name], });
Arka planda hizmet çalışanı.
Chrome Extension Samples repo'da, adım adım inceleyebileceğiniz bir işlev yerleştirme örneği bulunur. getCurrentTab() örneği, ilgili işlevin referansında yer alır.
Diğer geçici çözümleri arama
Önceki yaklaşımlar kullanım alanınızda yardımcı olmuyorsa alternatif bir çözüm bulmanız (ör. farklı bir kitaplığa geçiş yapma) veya kitaplığın işlevselliğini kullanmanın başka yollarını bulmanız gerekebilir. Örneğin, Google Analytics söz konusu olduğunda Google Analytics 4 kılavuzumuzda açıklandığı gibi resmi uzaktan barındırılan JavaScript sürümünü kullanmak yerine Google Measurement Protocol'e geçebilirsiniz.
İçerik güvenlik politikasını güncelleme
"content_security_policy", manifest.json dosyasından kaldırılmadı ancak artık iki özelliği ("extension_pages" ve "sandbox") destekleyen bir sözlük.
{ ... "content_security_policy": "default-src 'self'" ... }
{ ... "content_security_policy": { "extension_pages": "default-src 'self'", "sandbox": "..." } ... }
extension_pages: HTML dosyaları ve hizmet çalışanları dahil olmak üzere uzantınızdaki bağlamları ifade eder.
sandbox: Uzantınızın kullandığı tüm korumalı alana alınmış uzantı sayfalarını ifade eder.
Desteklenmeyen içerik güvenlik politikalarını kaldırma
Manifest V3, Manifest V2'de izin verilen "extension_pages" alanındaki belirli içerik güvenliği politikası değerlerine izin vermez. Manifest V3, özellikle uzaktan kod yürütmeye izin verenlere izin vermez. script-src, object-src ve worker-src yönergeleri yalnızca aşağıdaki değerlere sahip olabilir:
selfnonewasm-unsafe-eval- Yalnızca paketi açılmış uzantılar: herhangi bir localhost kaynağı (
http://localhost,http://127.0.0.1veya bu alan adlarındaki herhangi bir bağlantı noktası)
sandbox için içerik güvenlik politikası değerlerinde bu tür yeni kısıtlamalar yoktur.