it-swarm-tr.com

Bir sayfadaki reklamlar şifremi okuyabilir mi?

Feragatname: Çok az web-dev/güvenlik bilgim var, bu yüzden lütfen bir "meslekten olmayanlarla" konuşuyormuş gibi cevaplayın.

Web reklamlarının kendi JavaScript'lerini çalıştırabilmesi gerekir , "gerçek kullanıcılar" tarafından görüntülendiğini doğrulayabilmelerini duydum. StackOverflow'daki bu olay gösterdiği gibi, temelde ücretsiz saltanat verilir.

Ayrıca JavaScript bir web sayfasındaki tuş vuruşlarını yakalamak için kullanılabilir olduğunu biliyorum.

Sayfada reklamların ve başlıkta kullanıcı/geçiş metin kutularının bulunduğu goodreads gibi bir durumda, reklamın kimlik bilgilerimi kaydetmek için tuş vuruşlarını okumasını engelleyen bir şey var mı? Bir reklamdan tuş vuruşlarını okumak mümkün değil mi?

Bir giriş sayfasında reklam görürsem sayfanın kimlik bilgilerimi girmek için güvenli olmadığını varsayabilir miyim?

250
scohe001

Hiçbir şey reklamların şifrelerinizi okumasını engellemez.

Reklamlar (veya analitik veya JavaScript kitaplıkları gibi herhangi bir komut dosyası) ana JavaScript kapsamına erişebilir ve birçok hassas şeyi okuyabilir: finansal bilgiler, şifreler, CSRF belirteçleri, vb.

Korumalı alandaki iframe'e yüklenmedikleri sürece.

Bir reklamı korumalı alan iframe içine yüklemek, erişebildiği JavaScript kapsamına güvenlik kısıtlamaları ekleyeceğinden, kötü şeyler yapamaz.

Ne yazık ki, üçüncü taraf komut dosyalarının çoğu korumalı alan değildir. Bunun nedeni, bazılarının düzgün çalışması için ana kapsama erişime ihtiyaç duymasıdır. neredeyse hiç sanallaştırılmadı.


Bir geliştirici olarak ne yapabilirim?

Herhangi bir üçüncü taraf komut dosyası tüm kişisel verilerinizin güvenliğini tehlikeye atabileceğinden, tüm hassas sayfalar (giriş formları veya ödeme sayfaları gibi) kendi Kökenlerine yüklenmelidir (bir alt alan adı iyidir).

Başka bir Kökeni kullanmak, Aynı Kökenli Politika : ana Köken üzerinde çalışan komut dosyalarının korunan Köken üzerindeki hiçbir şeye erişememesine izin verir.

Not: İçerik Güvenliği Politikası ve Alt Kaynak Bütünlüğü , üçüncü taraf kolayca incelenebilirse de kullanılabilir, ancak çoğu reklam ağı artık çalışmazsa onları kullandın.

222
Benoit Esnard

Bu, web sitesinin reklamları nasıl yüklediğine bağlıdır.

Goodreads durumunda, HTML'leri reklam sağlayıcısından javascript içerir. Özellikle, https://www.goodreads.com/ Tarafından döndürülen HTML belgesinin 81-145. Satırları şöyledir:

<script>
  //<![CDATA[
    var gptAdSlots = gptAdSlots || [];
    var googletag = googletag || {};
    googletag.cmd = googletag.cmd || [];
    (function() {
      var gads = document.createElement("script");
      gads.async = true;
      gads.type = "text/javascript";
      var useSSL = "https:" == document.location.protocol;
      gads.src = (useSSL ? "https:" : "http:") +
      "//securepubads.g.doubleclick.net/tag/js/gpt.js";
      var node = document.getElementsByTagName("script")[0];
      node.parentNode.insertBefore(gads, node);
    })();
    // page settings
  //]]>
</script>
<script>
  //<![CDATA[
    googletag.cmd.Push(function() {
      googletag.pubads().setTargeting("sid", "osid.bd63050e605ccee9f21515a2dedfdaea");
    googletag.pubads().setTargeting("grsession", "osid.bd63050e605ccee9f21515a2dedfdaea");
    googletag.pubads().setTargeting("surface", "desktop");
    googletag.pubads().setTargeting("signedin", "false");
    googletag.pubads().setTargeting("gr_author", "false");
    googletag.pubads().setTargeting("author", []);
      googletag.pubads().enableAsyncRendering();
      googletag.pubads().enableSingleRequest();
      googletag.pubads().collapseEmptyDivs(true);
      googletag.pubads().disableInitialLoad();
      googletag.enableServices();
    });
  //]]>
</script>
<script>
  //<![CDATA[
    ! function(a9, a, p, s, t, A, g) {
      if (a[a9]) return;

      function q(c, r) {
        a[a9]._Q.Push([c, r])
      }
      a[a9] = {
      init: function() {
        q("i", arguments)
      },
      fetchBids: function() {
        q("f", arguments)
      },
      setDisplayBids: function() {},
        _Q: []
      };
      A = p.createElement(s);
      A.async = !0;
      A.src = t;
      g = p.getElementsByTagName(s)[0];
      g.parentNode.insertBefore(A, g)
    }("apstag", window, document, "script", "//c.Amazon-adsystem.com/aax2/apstag.js");

    apstag.init({
      pubID: '3211', adServer: 'googletag', bidTimeout: 4e3
    });
  //]]>
</script>

Sonuç olarak, reklamverenin javascript kodu web sitesinin kendisi ile aynı yürütme bağlamında çalışır ve web sitesi ile tüm etkileşimlerinizi gözlemlemek de dahil olmak üzere web sitesinin yapabileceği her şeyi yapabilir.

Bunun yerine, reklamları farklı bir Kökenden bir iframe yerleştirerek yükleselerdi, reklamverenin kodu kendi yürütme bağlamında yayınlanırdı ve tarayıcı, aynı Köken politikasını ihlal ederek çevredeki web sitesine erişimi engellerdi.

Genel olarak, web sitesinin reklamverenin kodunu izole edip etmediğini anlamanın tek yolu web sitesinin kodunu incelemektir.

29
meriton