Uzantıların tarayıcı içinde özel ayrıcalıklara erişimi vardır ve bu da onları aşağıdakiler için cazip bir hedeftir: belirler. Bir uzantının her kullanıcısı, güvenlik açığına karşı savunmasız hale gelir izin verilir. inceleyeceğiz.
Geliştirici hesaplarını koruma
Uzantı kodu, Google hesapları üzerinden yüklenir ve güncellenir. Geliştiricilerin hesaplar güvenliği ihlal edilirse saldırgan doğrudan tüm kullanıcılara kötü amaçlı kod gönderebilir. Bu hesapları şu şekilde koruyun: Özellikle geliştirici hesapları oluşturmak ve tercihen iki faktörlü kimlik doğrulamayı etkinleştirmek güvenlik anahtarı kullanabilirsiniz .
Grupların seçici olmasını sağlayın
Grup yayıncılığı kullanıyorsanız grubu güvenilir geliştiricilerle sınırlı tutun. Kabul etme bilinmeyen kullanıcılardan üyelik istekleri.
Hiçbir zaman HTTP kullanma, Asla
Veri isterken veya gönderirken HTTP bağlantısından kaçının. Herhangi bir HTTP bağlantısının "izinsiz izleyenler" veya " değişiklikler" barındıran içerikler. Yerleşik olduğundan HTTPS her zaman tercih edilmelidir. ortadaki adam saldırılarının çoğunu atlatan güvenlik özellikleri.
Minimum izin isteme
Chrome tarayıcı, bir uzantının erişimini şurada açıkça istenen ayrıcalıklarla sınırlandırır: manifest belgesini inceleyin. Uzantılar, yalnızca API'leri ve API'leri kaydederek izinlerini en aza indirmelidir. Google Trendler'i kullanabilirsiniz. Rastgele kod en aza indirilmelidir.
Uzantı ayrıcalıklarının sınırlandırılması potansiyel bir saldırganın kötü amaçla kullanabileceği alanları kısıtlar.
Kaynaklar arası XMLHttpRequest
Bir uzantı yalnızca kendisinden ve alan adlarından kaynak almak için XMLHttpRequest öğesini kullanabilir izinlerde belirtilen değerlerdir.
{
"name": "Very Secure Extension",
"version": "1.0",
"description": "Example of a Secure Extension",
"permissions": [
"/*",
"https://*.google.com/"
],
"manifest_version": 2
}
Bu uzantı, şu şekilde developer.chrome.com ve Google'ın alt alanlarındaki her şeye erişim izni istiyor:
izinlerde "/*"
ve "https://*google.com/"
listeleniyor. Öğe
uzantısının güvenliği ihlal edilmişse, yine de yalnızca web sitelerini karşılayan web siteleriyle
eşleşme kalıbını kontrol edin. Saldırgan, "https://user_bank_info.com"
veya
"https://malicious_website.com"
ile etkileşim kurun.
Manifest alanlarını sınırla
Manifest'e gereksiz kayıtların eklenmesi güvenlik açıklarına neden olur ve görünür. Manifest alanlarını, uzantının temel aldığı alanlarla sınırlayıp belirli bir alan sağlayın teşekkür ederiz.
Harici olarak bağlanabilir
externally_connectable
alanını kullanarak,
uzantısı ile bilgi alışverişinde bulunur. Uzantının harici olarak kimlerle bağlantı kurabileceğini kısıtlama
güvenilir kaynaklar.
{
"name": "Super Safe Extension",
"externally_connectable": {
"ids": [
"iamafriendlyextensionhereisdatas"
],
"matches": [
"/*",
"https://*google.com/"
],
"accepts_tls_channel_id": false
},
...
}
Web tarafından erişilebilen kaynaklar
Kaynakları web_accessible_resources
kapsamında web'de erişilebilir kılmak
uzantı, web siteleri ve saldırganlar tarafından algılanabilir.
{
...
"web_accessible_resources": [
"images/*.png",
"style/secure_extension.css",
"script/secure_extension.js"
],
...
}
Web'den erişilebilir kaynak sayısı ne kadar fazlaysa potansiyel bir saldırgan da o kadar çok fırsattan yararlanabilir. Sakla en aza indirin.
Uygunsuz içerik güvenliği politikası ekleme
Siteler arası erişimi önlemek için manifest dosyasına uzantıya bir içerik güvenliği politikası ekleyin. . Uzantı yalnızca kaynakları kendisinden yüklüyorsa aşağıdakileri kaydedin:
{
"name": "Very Secure Extension",
"version": "1.0",
"description": "Example of a Secure Extension",
"content_security_policy": "default-src 'self'"
"manifest_version": 2
}
Uzantının belirli ana makinelerden komut dosyaları içermesi gerekiyorsa bunlar da dahil edilebilir:
{
"name": "Very Secure Extension",
"version": "1.0",
"description": "Example of a Secure Extension",
"content_security_policy": "default-src 'self' https://extension.resource.com"
"manifest_version": 2
}
Yürütülebilir API'lerden kaçının
Kod yürüten API'lerin yerine daha güvenli alternatiflerle değiştirilmelidir.
document.Write() ve innerHTML
document.write()
ve innerHTML
ile dinamik olarak HTML öğeleri oluşturmak daha basit olsa da
ve uzantının bağımlı olduğu web sayfaları, saldırganlara açık bir şekilde
kötü amaçlı komut dosyaları. Bunun yerine, DOM düğümlerini manuel olarak oluşturun ve dinamik içerik eklemek için innerText
kullanın.
function constructDOM() {
let newTitle = document.createElement('h1');
newTitle.innerText = host;
document.appendChild(newTitle);
}
eval ()
eval()
iletilen tüm kodları yürüteceğinden, saldırıları önlemek için mümkün olduğunca eval()
kullanmaktan kaçının.
bu da zararlı olabilir.
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data.json", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// WARNING! Might be evaluating an evil script!
var resp = eval("(" + xhr.responseText + ")");
...
}
}
xhr.send();
Bunun yerine, JSON.parse()
gibi daha güvenli ve daha hızlı yöntemleri tercih edin
var xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data.json", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
// JSON.parse does not evaluate the attacker's scripts.
var resp = JSON.parse(xhr.responseText);
}
}
xhr.send();
İçerik komut dosyalarını dikkatli kullanın
İçerik komut dosyaları bağımsız bir dünyada yaşasa da saldırılardan etkilenmez:
- İçerik komut dosyaları, bir uzantının web sayfasıyla doğrudan etkileşime giren tek parçasıdır. Bu nedenle, zararlı web sayfaları içerik komut dosyasının bağlı olduğu DOM bölümlerini manipüle edebilir. veya adlandırılmış öğeler gibi şaşırtıcı web standardı davranışlarından yararlanmaya yönelik reklamlar içerir.
- Web sayfalarının DOM'si ile etkileşimde bulunmak için içerik komut dosyalarının web sayfası. Bu durum, içerik komut dosyalarını yan kanal saldırıları yoluyla veri sızıntısına karşı savunmasız hale getirir (ör. Spectre) ve kötü amaçlı bir web sayfasının güvenliğinin ihlal edilmesi durumunda saldırganların oluşturma sürecidir.
Hassas çalışmalar, uzantının arka planı gibi özel bir süreçte gerçekleştirilmelidir. komut dosyası olarak adlandırılır. İçerik komut dosyalarına uzantı ayrıcalıklarının yanlışlıkla verilmesini önleyin:
- İçerik komut dosyasındaki iletilerin bir saldırgan tarafından oluşturulmuş olabileceğini varsayalım (ör. tüm girişleri doğrulayıp temizleştirin ve komut dosyalarınızı siteler arası komut dosyası çalıştırmaya karşı koruyun.
- İçerik komut dosyasına gönderilen tüm verilerin web sayfasına sızdırılabileceğini varsayın. Hassas verileri gönderme (ör. uzantıya ait sırlar, diğer web kaynaklarından veriler, tarama geçmişi) içeriğe komut dosyaları.
- İçerik komut dosyaları tarafından tetiklenebilecek ayrıcalıklı işlemlerin kapsamını sınırlandırın. İzin verme
isteğe bağlı URL'lere yönelik istekleri tetiklemek veya isteğe bağlı bağımsız değişkenleri
uzantı API'leri (ör. rastgele URL'lerin
fetch
veyachrome.tabs.create
API) kullanabilirsiniz.
Girişleri kaydetme ve temizleme
Dinleyicileri yalnızca uzantının içeriği ile sınırlandırarak uzantıları kötü amaçlı komut dosyalarına karşı koruyun. gelen verilerin gönderenlerini beklemek, doğrulamak ve tüm girişleri sterilize etmek.
Yalnızca runtime.onRequestExternal
için kaydolması beklenen uzantılar
harici bir web sitesinden veya uzantıdan gelen tüm iletişim bilgileri. Her zaman gönderenin
güvenilir kaynak olarak kullanabilirsiniz.
// The ID of an external extension
const kFriendlyExtensionId = "iamafriendlyextensionhereisdatas";
chrome.runtime.onMessageExternal.addListener(
function(request, sender, sendResponse) {
if (sender.id === kFriendlyExtensionId)
doSomething();
});
Uzantının kendisinden gelen runtime.onMessage etkinliği aracılığıyla gönderilen iletiler de MessageSender'ın güvenliği ihlal edilmiş bir içerik komut dosyasından gelmediğinden emin olun.
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.allowedAction)
console.log("This is an allowed action.");
});
Kullanıcı girişlerini ve gelen bilgileri temizleyerek uzantıların saldırganın komut dosyasını yürütmesini önleyin veriler de dahildir. Yürütülebilir API'lerden kaçının.
function sanitizeInput(input) {
return input.replace(/&/g, '&').replace(/</g, '<').replace(/"/g, '"');
}