javascript - 在 Javascript 中可以删除特权吗?

标签 javascript security privileges

我想知道是否可以在 Javascript 中删除权限?


function takeAwaySetTimeout()
{
  var oldSetTimeout = window.setTimeout;
  window.setTimeout = function()
  {
    console.log("not working anymore!");
  };
}


setTimeout("console.log('this works');",0);  // "this works!"
takeAwaySetTimeout();
setTimeout("console.log('this works');",0);  // "not working anymore!"

不幸的是,在我看来这很复杂,因为一个简单的delete window.setTimeout 将带回特权!所以对我来说,这似乎表明不幸的是 Javascript 不会提供被剥夺的特权。

我知道特权这个词有些借用。 这是问题的背景,我认为任何可能有效地删除 [Native Code] 函数(=方法 .toSource() 表明它提供了一个函数由 javascript 引擎)在某些部分可以访问,作为一种方法来保护受此限制(权限被删除)的代码不那么安全。

澄清

欢迎您提出更清晰的要求,并希望您能负责任地回应并取消“免费”问题! 还请考虑确实已经收到了两个有用的答案,这表明有人能够理解这个问题。当然,如果可能的话(有些东西只需要背景......)我也努力扩大理解。

“目前还不清楚限制对 native 功能的访问如何提供更高的安全性。是 这个服务器端或客户端 JavaScript?”

1) 是客户端还是服务器端并不重要。当然,服务器端似乎更重要一点。因为可能有更多的功能(即写入文件、访问文件......),所以浏览器内部的 Javascript 可能能够做的更多(但考虑新 API 的功能......和风险!)

2) 也许 window.setTimeout() [ native 函数] 的选择并不完美(为清楚起见),因为可能没有明显的直接安全关系。它已被使用,因为它是众所周知的并且是占位符。见(3)

3) 我的理由是提供给 Javascript 代码的每个功能都是矛盾的。在pro方面,丰富了“它能做什么?”积极和善意的代码将负责任地使用它。然而,在方面,功能可能意味着访问某些东西,如果滥用这些东西可能会导致与安全相关的问题。一个例子是外部 Javacript 会执行 XHR 并将信息发布到服务器,可能是具有私有(private)数据(即客户健康状况)的数据。例如,如果可以更好地移除 XHR 对象 window.XMLHttpRequest,那么这种滥用的机会就会受到限制。简而言之,“你不能开枪打人,没有枪!”。比如XHR(可能比setTimeout更明显)就是这样一把枪。如果“不受信任的代码”并不真正需要 XHR,那么通过放弃此特权/功能来消除风险是明智的。

4) 我认为(也在回复的上下文中)这个问题已经演变。我认为很清楚,但如果不是这样,请发表评论。虽然最初 Juhana说:

It's a bit unclear[...]

我知道它不是完全不清楚,因此现在它可能已经足够清晰(请考虑有用的答案)以允许“取消保留”/“释放问题”。此外,如果您发现该问题足够有趣,可以保留,那么现在是时候发现它足够有趣,可以投票了;)

最佳答案

有很多方法可以获得原始功能,黑名单无法工作,因为你会错过一些东西,例如

Window.prototype.setTimeout.call(window,'alert(1)');

此问题的一个解决方案是创建一个列入白名单的沙箱。我创建了一个名为 MentalJS 的沙箱。此沙箱使用 $ 后缀重写您的所有代码,例如 alert(1) 变为 alert$(1) 这允许您选择在沙箱中允许哪些函数/对象。

代码可在此处获得: http://code.google.com/p/mentaljs/

和一个演示: http://businessinfo.co.uk/labs/MentalJS/MentalJS.html

关于javascript - 在 Javascript 中可以删除特权吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20655721/

相关文章:

使用 IIFE 的 Javascript 变量作用域

javascript - 在 blogger 中加载 jquery 时出现问题

security - 可用于测试的无效域的公共(public)可信证书

mysql - 如何在 MariaDB (MySQL) 中正确设置所有权和权限?

c++ - 如何在我的代码中查找(并删除)需要管理员权限的位置?

Javascript 文件中的 PHP 变量

security - 幸运十三这个名字的含义是什么?

php - 如何以安全的方式提供密码重置功能?

mysql - "ALL [PRIVILEGES]"中包含什么?

javascript - 在文本字段内显示数量值