我也知道JavaScript可以用来捕获网页上的击键。像好读一样,在页面上有广告,在标题上有用户/传递文本框的地方,是否有适当的地方可以阻止广告读取击键来记录我的凭据?
如果根本无法从广告中读取击键?
#1 楼
没有什么可以阻止广告读取您的密码。广告(或其他脚本,如分析或JavaScript库)可以访问JavaScript的主要范围,并且可以读取很多敏感内容:财务信息,密码,CSRF令牌等。
除非将其加载到沙盒iframe中。
将广告加载到沙盒iframe中会为JavaScript添加安全性限制可以访问它的范围,因此它将无法执行令人讨厌的工作。这是因为其中一些需要访问主作用域才能正常工作,因此它们几乎不会被沙盒化。
作为开发人员,我该怎么办?
由于任何第三方脚本都可能损害您所有个人数据的安全性,因此所有敏感页面(如登录表单或结帐页面)都应加载到它们自己的原始位置(可以使用子域)。
使用其他来源可以使我们从同源政策中受益:在主要来源上运行的脚本无法访问受保护来源上的任何内容。
注意:内容安全策略和子资源完整性也可以如果可以轻松地查看第三方,则可以使用,但是如果您使用了第三方,则大多数广告网络将无法正常工作。
评论
像我这样的外行人能通过某种方式分辨出沙盒广告与非沙盒广告之间的区别吗?
–scohe001
19年8月6日在16:06
@ scohe001:您知道如何在浏览器中使用“检查元素”工具吗?沙盒iframe具有“沙盒”属性。不幸的是,在没有任何HTML知识的情况下,我不知道有任何简便的方法来检查它。 :(
– Benoit Esnard
19年8月6日在16:12
@ scohe001这个Stylus用户手册将在可运行脚本的未沙盒化iframe和沙盒化iframe周围放置一个超级讨厌的边框:iframe:not([[sandbox]),iframe [sandbox〜= allow-scripts] {border:10px实心红色!重要! border-image:重复线性渐变(45度,红色,红色5%,#ff0 5%,#ff0 10%)10!important;}
– AuxTaco
19年8月7日在1:18
同源策略可防止脚本读取外部资源。如果恶意脚本正在您的页面上运行,则不会在意您是否从其他来源加载了该脚本,它只会运行并能够将数据发送到任何喜欢的地方。
– Kaido
19年8月7日在6:43
最佳做法是不在登录屏幕上显示广告。如果某个网站不遵守该规定,则至少可以向他们投诉。
–eckes
19年8月7日,11:40
#2 楼
这取决于网站如何加载广告。如果是Goodreads,则其HTML包含来自广告提供商的javascript。具体来说,
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>
因此,广告商的javascript代码在与网站本身相同的执行上下文中运行,并且可以完成网站可以做的所有事情,包括观察您与网站的所有互动。
如果他们改为通过嵌入其他来源的iframe加载广告,则广告客户的代码将在其自己的执行上下文中运行,并且浏览器将以违规方式阻止对周围网站的访问
通常,判断网站是否隔离广告商代码的唯一方法是检查网站的代码。
评论
如今,大多数广告客户都不允许您将其加载到iframe中。但是他们“承诺”加载他们在自己的iframe中提供的第三方广告。
– Barmar
19年8月7日在17:01
评论
比那更糟。 Web性能工具和类似工具不仅会读取您的凭据,还会读取您键入然后删除的凭据。真讨厌您可能可以不键入任何内容,而总是粘贴您的凭据。但是javascript可以访问您的DOM,因此它可以读取每个元素。阻止这种情况的唯一方法不是使用凭据,而是使用oAuth并将您的生活交给Google。可能出什么问题了。我很惊讶W3没有修改DOM规范以禁止对进行任何脚本访问-或至少像提供