【问题标题】:JavaScript completely "tamper safe" variablesJavaScript 完全“防篡改”变量
【发布时间】:2013-12-15 11:30:02
【问题描述】:

所以,问题来了。

我有类似的东西:

// Dangerous __hostObject that makes requests bypassing 
// the same-origin policy exposed from other code.
(function(){
    var danger = __hostObject;
})();
delete __hostOBject;

知道没有脚本可以篡改或访问__hostObject,我是否完全安全?

(如果可以的话,我有一个CSRF vulnerability 或更糟。)

注意 1:这是针对浏览器扩展的。我有比页面上运行的其他脚本更好的钩子。我在他们之前执行,甚至在他们加载之前就完成了。

注 2:我知道这已被多次询问脚本。我想知道如果我知道我在任何其他脚本之前加载 是否有可能。

【问题讨论】:

  • 我写了一个sample code,它覆盖了Function.prototype.call。 (如果你真的认为我在帮助恶意开发者,请随时标记这篇文章。在我看来,最终的攻击者无论如何都会知道这些技术。)
  • @ComFreek 你忘记了return oldCall 的结果。但事实上,这是用于猴子补丁(内置)JavaScript 方法的一般原则。

标签: javascript closures browser-extension


【解决方案1】:

前提是__hostObject是可删除的,你问题中的代码是安全的。

但是,我假设您的实际代码稍微复杂一些。在这种情况下,需要非常仔细的编码,因为页面可以更改内置方法(例如Function.prototype.call)以进入您的闭包并做他们想做的任何邪恶的事情。在我进行这样的测试时,我已经通过这种方法成功地滥用了 Kango 和 Crossrider 等扩展框架的功能。

【讨论】:

  • 你今天很敏锐(或者很幸运,但我想思维敏锐)。这是我们现在在 Crossrider 中遇到的问题。我现在正在为 Internet Explorer 测试 BHO,我需要让 JavaScript 发出绕过跨源策略和/或将跨站点数据存储在注册表中的请求。两者都非常有问题的操作。我想不出更好的办法。 (另外,如果您可以使用.call 添加此类漏洞利用的示例代码 - 那真的很棒)。如果.call 之类的内容被篡改,是否有可靠的方法杀死该应用程序? (事后考虑——他们也可以在我加载之后执行)。
  • @BenjaminGruenbaum 滥用功能的代码是微不足道的,我不会发布示例代码以避免喂给恶意开发者。我只是在为您的其他问题写一个答案,敬请期待;)
  • 对不起,伙计们。我试图了解问题和解决方案,但不能。各位大神能多解释一下吗?
  • @thefourtheye 哪个问题和哪个解决方案?请详细说明您不明白的部分。
  • @BenjaminGruenbaum 首先,你的问题。我没有得到实际的问题:(
【解决方案2】:

不会简单地添加断点并重新加载脚本会暴露您的__hostObject

【讨论】:

  • 问题不在于实际用户,而是我无法信任的其他脚本弄乱它。据我所知,另一个脚本无法做到这一点。
  • 好吧,听起来不错。
猜你喜欢
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-06
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
相关资源
最近更新 更多