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 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:

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