javascript - JavaScript setTimeout 和 setInterval 不是有一些潜在的安全漏洞吗

标签 javascript security setinterval

虽然它至少揭示了一些潜在的干扰,但这并不是什么巨大的安全风险。

假设我们有那些非常封闭的 JavaScript 模块,它们在彼此不知情的情况下加载到我的页面中。它们来自“受信任”,但是 lib2 中的某些开发人员犯了错误,请参阅代码。

Lib1 http://good.site/libs/the-famous-important-lib1.js

setInterval(function(){
   alert('I am doing some important stuff');
}, 1000);

Lib2 http://not-excelent.site/libs/the-cool-lib2.js

var i = setInterval(function(){}, 0);
for(; i >= 0; i-=1) {
    clearInterval(i);
}

我的 HTML

<script src="http://good.site/libs/the-famous-important-lib1.js" type="text/javascript"></script>
<script src="http://not-excelent.site/libs/the-cool-lib2.js" type="text/javascript"></script>

在浏览器或至少在 Firefox 中,加载 Lib2 实际上会完全破坏 Lib1。有人可能会说这不重要,犯这样的错误是多么愚蠢。

我认为这是一种不良行为。因为我们在我们的网站上加载了越来越多的第三方库。也许一个合适的解决方案是 setIntervalsetTimeout 应该返回一个真正唯一且不可伪造的 Ojbect,而不仅仅是数字自动递增 ID。

有人可能会为此想出一个真实世界的利用(仍然没有测试它是否是跨帧,我真的很怀疑)。

问题是:是吗? es5 中的严格模式是否克服了这一点?

最佳答案

Does strict mode in es5 overcomes that?

没有。 setIntervalsetTimeout 是 DOM 绑定(bind)的一部分——它们不是 EcmaScript 内置函数,因此没有在任何版本的 EcmaScript 中指定。严格模式下没有什么特别影响它们。

这可能会在 EcmaScript 的下一个版本中改变,因为 TC39 委员会认为并发是一个需要指定的核心语言特性,并且可能会保留 event loop concurrency。 .

不过,这些更改不太可能影响您提出的问题。 Caja/Secure EcmaScript (SES) 确保间隔和超时 ID 不可猜测。

关于javascript - JavaScript setTimeout 和 setInterval 不是有一些潜在的安全漏洞吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8832563/

相关文章:

javascript - 悬停不适用于 div 标签,而是更改内部文本元素的颜色

javascript - 如何使用 Jangaroo 将单个 As3 函数转换为 javascript?

security - Paypal form post 提交时修改付款金额

linux - chmod 777 的后果

jquery - 在 Internet Explorer 中使用 setInterval - 不起作用? jQuery

javascript - 是否可以在 IE8 中运行某些 HTML5 输入类型?

javascript - 将 asar 包中的打包 JS 文件传递​​给生成的 Node 子进程

ruby-on-rails - 防止垃圾邮件机器人攻击 Rails 应用程序

html - setTimeout 或 setInterval 或 requestAnimationFrame

reactjs - React 原生 setInterval useState