首页 > 解决方案 > 是否有一种安全的方法可以在网页中运行 eval 并避免它访问页面其余部分的内容?

问题描述

我想知道是否可以以安全的方式在网页中运行用户提供的代码。

我想添加用户可以动态更改以更改某些页面行为的代码,但我不希望他们使用漏洞。

例如,我想让用户编写一个以安全方式返回布尔值的方法,这样他们就不会在页面中注入恶意代码并更改 dom,也不会窃取页面中其余组件的信息。

function( valuesToUse ) {

  //userprovided logic returning true or false depending on the input
  return valuesToUse.favouriteAnimal === "Lizard"
}

标签: javascriptsecurityeval

解决方案


只要用户只运行自己的代码,就不需要任何安全措施。如果他们破坏了网站,他们只会为自己破坏它。

如果要共享这些代码,唯一可靠的方法是拥有一个沙盒 IFRAME 并在其中运行所有内容(查看 SO 片段、JS fiddle 和类似网站的工作方式)。在这种情况下,用户脚本将无法与主页交互。这是一篇关于该主题的好文章:https ://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/

如果您需要 1) 可以与主页交互并且 2) 可以在用户之间共享的用户脚本,那么您必须发明自己的编程语言并将其即时编译为 javascript。JS 中没有选项可以将内置的eval.


推荐阅读