it-swarm.it

Gli annunci su una pagina possono leggere la mia password?

Dichiarazione di non responsabilità: Ho una conoscenza minima del web-dev/sicurezza, quindi rispondi come se parlassi con un "laico".

Ho sentito che gli annunci web devono essere in grado di eseguire il proprio JavaScript in modo che possano verificare che vengano visualizzati da "utenti reali". Come questo incidente su StackOverflow mostra, in pratica ricevono un regno gratuito.

So anche che JavaScript può essere utilizzato per acquisire sequenze di tasti su una pagina Web .

Quindi, in un caso come goodreads , in cui sono presenti annunci sulla pagina e caselle di testo utente/passaggio nell'intestazione, esiste qualcosa che impedisce all'annuncio di leggere i tasti premuti per registrare le mie credenziali? La lettura dei tasti non è semplicemente possibile da un annuncio?

Se vedo annunci in una pagina di accesso, devo presumere che la pagina non sia sicura per inserire le mie credenziali?

250
scohe001

Nulla impedisce agli annunci di leggere le tue password.

Gli annunci (o qualsiasi altro script come analisi o librerie JavaScript) hanno accesso all'ambito JavaScript principale e sono in grado di leggere molte cose sensibili: informazioni finanziarie, password, token CSRF, ecc.

Bene, a meno che non vengano caricati in un iframe sandbox.

Il caricamento di un annuncio in un sandboxed iframe aggiungerà restrizioni di sicurezza all'ambito JavaScript a cui ha accesso, quindi non sarà in grado di fare cose cattive.

Sfortunatamente, la maggior parte degli script di terze parti non sono in modalità sandbox. Questo perché alcuni di essi richiedono l'accesso all'ambito principale per funzionare correttamente, quindi " non sei quasi mai in sandbox.


Come sviluppatore, cosa posso fare?

Poiché qualsiasi script di terze parti potrebbe compromettere la sicurezza di tutti i tuoi dati personali, tutte le pagine sensibili (come i moduli di accesso o le pagine di pagamento) devono essere caricate sulla propria origine (va bene un sottodominio).

L'uso di un altro Origin ci consente di trarre profitto da la Politica sulla stessa origine : gli script in esecuzione su Origin principale non possono accedere a nulla su Origin protetto.

Nota: Informativa sulla sicurezza dei contenuti e Integrità delle risorse secondarie potrebbero essere utilizzati anche se la terza parte può essere facilmente rivista, ma la maggior parte delle reti pubblicitarie non potrebbe più funzionare se li hai usati.

222
Benoit Esnard

Dipende da come il sito web carica gli annunci.

Nel caso di goodreads, il loro HTML contiene javascript dal provider di annunci. In particolare, le righe 81-145 del documento HTML restituite da https://www.goodreads.com/ leggere:

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

Di conseguenza, il codice javascript dell'inserzionista viene eseguito nello stesso contesto di esecuzione del sito Web stesso e può fare tutto ciò che il sito Web può fare, inclusa l'osservazione di tutte le interazioni con il sito Web.

Se invece avessero caricato gli annunci incorporando un iframe da un'origine diversa, il codice dell'inserzionista sarebbe stato eseguito nel proprio contesto di esecuzione e il browser avrebbe bloccato l'accesso al sito Web circostante come una violazione della stessa politica di Origin.

In generale, l'unico modo per stabilire se il sito Web ha isolato il codice dell'inserzionista è ispezionare il codice del sito Web.

29
meriton