Manifest V3'te güvenliği iyileştirme
Bu, uzantı hizmet işçisinin parçası olmayan kod için gereken değişiklikleri açıklayan üç bölümden sonuncusudur. Bu dokümanda, uzantıların güvenliğini iyileştirmek için gereken değişiklikler açıklanmaktadır. Diğer iki bölümde, Manifest V3'e yükseltme yapmak için gereken kodunuzu güncelleme ve engellenen 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()
'i kullanarak harici mantık yürütemezsiniz.
- Tüm harici kodları (JS, Wasm, CSS) uzantı paketinize taşıyın.
- Kaynakları uzantı paketinden yüklemek için komut dosyası ve stil referanslarını güncelleyin.
- Kaynak URL'lerini çalışma zamanında oluşturmak için
chrome.runtime.getURL()
öğesini kullanın. - Korumalı alana alınmış bir iframe kullanın:
eval
venew Function(...)
, korumalı alana alınmış iframe'lerde desteklenmeye devam eder. Daha fazla bilgi için korumalı alan iframe'leri kılavuzunu okuyun.
executeScript()
yöntemi artık tabs
ad alanından scripting
ad alanına taşındı. Aramaları güncelleme hakkında bilgi edinmek için executeScript()
'yi taşıma başlıklı makaleyi inceleyin.
İsteğe bağlı dizelerin çalıştırılmasının hâlâ mümkün olduğu birkaç özel durum vardır:
- insertCSS işlevini kullanarak uzaktan barındırılan stil sayfalarını bir web sayfasına ekleme
chrome.devtools
kullanan uzantılar için: inspectWindow.eval, JavaScript'in incelenen sayfa bağlamında yürütülmesine olanak tanır.- Hata ayıklayıcı uzantıları, JavaScript'i bir hata ayıklama hedefinde 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 alınan JavaScript dosyaları.
- CDN'de barındırılan tüm kitaplıklar.
- Uzak barındırılan kodu dinamik olarak getiren paketlenmiş üçüncü taraf kitaplıkları.
Kullanım alanınıza ve uzak barındırma nedeninize bağlı olarak alternatif yaklaşımlar mevcuttur. Bu bölümde, dikkate alabileceğiniz yaklaşımlar açıklanmaktadır. Uzaktan barındırılan kodla ilgili sorun yaşıyorsanız rehberlik alabilirsiniz.
Yapılandırma odaklı özellikler ve mantık
Uzantı, çalışma zamanında uzak bir yapılandırmayı (ör. JSON dosyası) yükleyip önbelleğe alır. Önbelleğe alınan yapılandırma, hangi özelliklerin etkinleştirileceğini belirler.
Uzak hizmetle haricileştirilmiş mantık
Uzantı, uzak bir web hizmetini çağırıyor. Bu sayede kodu gizli tutabilir ve gerektiğinde değiştirebilir, Chrome Web Mağazası'na yeniden göndermeyle ilgili ek masraflardan kaçınabilirsiniz.
Uzaktan barındırılan kodu korumalı alana alınmış bir iframe'e yerleştirme
Uzaktan barındırılan kod korumalı alana alınmış iframe'lerde desteklenir. Kod, yerleştirme sayfasının DOM'una erişim gerektiriyorsa bu yaklaşımın işe yaramayacağını lütfen unutmayın.
Üçüncü taraf kitaplıklarını paketleme
React veya Bootstrap gibi popüler bir çerçeve kullanıyorsanız ve bu çerçeveyi daha önce harici bir sunucudan yüklüyorsanız sıkıştırı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 hizmet işçisine kitaplık eklemek için manifest dosyasında "background.type"
anahtarını "module"
olarak ayarlayın ve bir import
ifadesi kullanın.
Sekme içine yerleştirilmiş komut dosyalarında harici kitaplıkları kullanma
Harici kitaplıkları, scripting.executeScript()
çağrısını yaparken files
dizisine ekleyerek de çalışma zamanında yükleyebilirsiniz. Verileri çalışma zamanında 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
mülkü, bir işlevi içerik komut dosyası olarak eklemenize ve args
mülkünü kullanarak değişkenleri iletmenize olanak tanır.
let name = 'World!'; chrome.tabs.executeScript({ code: `alert('Hello, ${name}!')` });
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], });
Chrome Uzantısı Örnekleri deposu, adım adım uygulayabileceğiniz bir işlev ekleme örneği içerir. getCurrentTab()
örneği, ilgili işlevin referansında yer alır.
Diğer geçici çözümleri arayın
Önceki yaklaşımlar kullanım alanınızda işe yaramazsa alternatif bir çözüm (ör. farklı bir kitaplığa taşıma) veya kitaplığın işlevini 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 uzaktan barındırılan resmi JavaScript sürümünü kullanmak yerine Google Measurement Protocol'e geçebilirsiniz.
İçerik güvenliği politikasını güncelleme
"content_security_policy"
, manifest.json
dosyasından kaldırılmadı ancak artık iki özelliği destekleyen bir sözlüktür: "extension_pages"
ve "sandbox"
.
{ ... "content_security_policy": "default-src 'self'" ... }
{ ... "content_security_policy": { "extension_pages": "default-src 'self'", "sandbox": "..." } ... }
extension_pages
: HTML dosyaları ve servis çalışanları dahil olmak üzere uzantınızdaki bağlamları ifade eder.
sandbox
: Uzantılarınızın kullandığı korumalı alanlardaki uzantı sayfalarını ifade eder.
Desteklenmeyen içerik güvenliği politikalarını kaldırma
Manifest V3, "extension_pages"
alanında Manifest V2'de izin verilen belirli içerik güvenliği politikası değerlerine izin vermez. Özellikle Manifest V3, 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:
self
none
wasm-unsafe-eval
- Yalnızca paketi açılmamış uzantılar: Herhangi bir yerel ana makine kaynağı (
http://localhost
,http://127.0.0.1
veya bu alanlardaki herhangi bir bağlantı noktası)
sandbox
için içerik güvenliği politikası değerlerinde bu tür yeni kısıtlamalar yoktur.