Güvende kalın

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:

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, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;');
}