it-gundan.com

페이지의 광고에서 내 비밀번호를 읽을 수 있습니까?

면책 조항 : 웹 개발자/보안 지식이 최소한이므로 "레이맨"과 대화하는 것처럼 대답하십시오.

웹 광고는 자신의 JavaScript를 실행할 수 있어야 함 라고 말하여 그들이 "실제 사용자"에게 보여지는 것을 확인할 수 있습니다. 이 사건은 StackOverflow에서 발생 에서 알 수 있듯이 기본적으로 자유 통치권이 부여됩니다.

또한 JavaScript 웹 페이지에서 키 입력을 캡처하는 데 사용할 수 있음 도 알고 있습니다.

따라서 goodreads 와 같은 경우 페이지에 광고가 있고 헤더에 사용자/패스 텍스트 상자가있는 경우 광고에서 키 입력을 읽지 않아 자격 증명을 기록하지 못하게하는 것이 있습니까? 키 스트로크를 광고에서 읽을 수 없습니까?

로그인 페이지에 광고가 표시되면 자격 증명을 입력하기에 안전하지 않다고 가정해야합니까?

250
scohe001

광고가 비밀번호를 읽지 못하게하는 것은 없습니다.

광고 (또는 분석 또는 JavaScript 라이브러리와 같은 다른 스크립트)는 기본 JavaScript 범위에 액세스 할 수 있으며 재무 정보, 비밀번호, CSRF 토큰 등과 같은 중요한 정보를 많이 읽을 수 있습니다.

샌드 박스형 iframe에로드되지 않는 한.

sandboxed iframe 에 광고를로드하면 액세스 할 수있는 JavaScript 범위에 보안 제한이 추가되어 불쾌한 작업을 수행 할 수 없습니다.

불행히도, 대부분의 타사 스크립트는 샌드 박스로되어 있지 않습니다. 일부 스크립트가 제대로 작동하려면 기본 범위에 액세스해야하기 때문입니다. 거의 샌드 박스 처리되지 않았습니다.


개발자로서 어떻게해야합니까?

타사 스크립트는 모든 개인 데이터의 보안을 손상시킬 수 있으므로 모든 민감한 페이지 (예 : 로그인 양식 또는 체크 아웃 페이지)는 고유 한 원본에로드해야합니다 (하위 도메인은 양호).

다른 오리진을 사용하면 동일 출처 정책 에서 이익을 얻을 수 있습니다. 메인 오리진에서 실행되는 스크립트는 보호 된 오리진에서 아무것도 액세스 할 수 없습니다.

참고 : 콘텐츠 보안 정책하위 리소스 무결성 타사를 쉽게 검토 할 수있는 경우에도 사용할 수 있지만 대부분의 광고 네트워크는 더 이상 작동하지 않습니다 당신은 그것들을 사용했습니다

222
Benoit Esnard

웹 사이트에서 광고를로드하는 방법에 따라 다릅니다.

Goodreads의 경우 HTML에는 광고 제공 업체의 자바 스크립트가 포함됩니다. 특히 https://www.goodreads.com/에서 반환 한 HTML 문서의 81-145 행은 다음과 같습니다.

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

결과적으로, 광고 자의 자바 스크립트 코드는 웹 사이트 자체와 동일한 실행 컨텍스트에서 실행되며 웹 사이트와의 모든 상호 작용 관찰을 포함하여 웹 사이트가 할 수있는 모든 것을 수행 할 수 있습니다.

다른 출처에서 iframe을 삽입하여 광고를로드 한 경우 광고주의 코드는 자체 실행 컨텍스트에서 실행되었으며 브라우저는 동일한 출처 정책을 위반하여 주변 웹 사이트에 대한 액세스를 차단했을 것입니다.

일반적으로 웹 사이트에서 광고 코드를 분리했는지 여부를 알 수있는 유일한 방법은 웹 사이트 코드를 검사하는 것입니다.

29
meriton