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 güvenliği ihlal edilirse bu uzantıyı kullanan her kullanıcı, kötü amaçlı ve istenmeyen saldırılara karşı savunmasız hale gelir. Bu uygulamaları kullanarak uzantıların ve kullanıcılarının güvenliğini sağlayın.
Geliştirici hesaplarını koruma
Uzantı kodu, Google hesapları üzerinden yüklenir ve güncellenir. Geliştiricilerin hesaplarının güvenliği ihlal edilirse saldırganlar 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ı seçkin tutun
Grup yayınlama özelliğini kullanıyorsanız grubu güvenilir geliştiricilerle sınırlı tutun. Kabul etme bilinmeyen kullanıcılardan üyelik istekleri.
HTTP'yi hiçbir zaman kullanmayın
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 iste
Chrome Tarayıcı, bir uzantının manifest dosyasında açıkça istenen ayrıcalıklara erişimini sınırlar. Uzantıların, yalnızca bağımlı oldukları API'leri ve web sitelerini kaydederek izinlerini en aza indirmesi gerekir. Rastgele kod en aza indirilmelidir.
Uzantı ayrıcalıklarını sınırlandırmak, potansiyel bir saldırganın yararlanabileceği noktaları sınırlandırır.
Kaynaklar arası XMLHttpRequest
Uzantılar, yalnızca kendilerinden ve izinlerde belirtilen alanlardan kaynak almak için XMLHttpRequest kullanabilir.
{
"name": "Very Secure Extension",
"version": "1.0",
"description": "Example of a Secure Extension",
"permissions": [
"/*",
"https://*.google.com/"
],
"manifest_version": 2
}
Bu uzantı, izinlerde "/*"
ve "https://*google.com/"
'ü listeleyerek developer.chrome.com ve Google'ın alt alan adlarındaki her şeye erişim istiyor. Öğ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ırlama
Manifeste gereksiz kayıtlar eklemek güvenlik açıkları oluşturur ve uzantıyı daha görünür hale getirir. 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
Uzantıların hangi harici uzantılarla ve web sayfalarıyla bilgi alışverişinde bulunacağını belirtmek için externally_connectable
alanını kullanın. Uzantıların güvenilir kaynaklarla harici olarak kimlerle bağlantı kurabileceğini kısıtlayın.
{
"name": "Super Safe Extension",
"externally_connectable": {
"ids": [
"iamafriendlyextensionhereisdatas"
],
"matches": [
"/*",
"https://*google.com/"
],
"accepts_tls_channel_id": false
},
...
}
Web'e erişilebilen kaynaklar
web_accessible_resources
altındaki kaynakları web'den erişilebilir hale getirmek, uzantının web siteleri ve saldırganlar tarafından algılanabilir hale gelmesine neden olur.
{
...
"web_accessible_resources": [
"images/*.png",
"style/secure_extension.css",
"script/secure_extension.js"
],
...
}
Web'e erişilebilen kaynaklar ne kadar fazlaysa potansiyel bir saldırgan o kadar fazla yöntemden yararlanabilir. Bu dosyaları minimumda tutun.
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ı belirli ana makinelerden komut dosyası içeriyorsa bu komut dosyaları şunlar aracılığıyla 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
}
Çalıştırılabilir 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ı tecrit edilmiş bir dünyada yer alsa da saldırılara karşı bağışık değildir:
- İçerik komut dosyaları, bir uzantının doğrudan web sayfasıyla etkileşime geçen tek parçasıdır. Bu nedenle, kötü niyetli web sayfaları, içerik komut dosyasının bağlı olduğu DOM'un bölümlerini değiştirebilir veya adlandırılmış öğeler gibi şaşırtıcı web standardı davranışlarından yararlanabilir.
- 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ı aracılığıyla veri sızıntısına karşı savunmasız hale getirir (ör. Spectre) ve kötü amaçlı bir web sayfası, güvenliği ihlal etmesi 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. Uzantı ayrıcalıklarının içerik komut dosyalarına yanlışlıkla gösterilmesini önleyin:
- İçerik komut dosyasından gelen mesajların bir saldırgan tarafından hazırlanmış olabileceğini varsayın (ör. tüm girişleri doğrulayın ve temizleyin ve komut dosyalarınızı siteler arası komut dosyalarına karşı koruyun).
- İçerik komut dosyasına gönderilen tüm verilerin web sayfasına sızabileceğ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ırlayın. İçerik komut dosyalarının istemleri rastgele URL'lere tetiklemesine veya uzantı API'lerine rastgele bağımsız değişkenler iletmesine izin vermeyin (ör.
fetch
veyachrome.tabs.create
API'sine rastgele URL'ler iletilmesine izin vermeyin).
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();
});
MessageSender'ın güvenliği ihlal edilmiş bir içerik komut dosyasından gelmediğinden emin olmak için uzantıdan gelen runtime.onMessage etkinliği aracılığıyla gönderilen mesajlar bile incelenmelidir.
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, '"');
}