javascript - 是否有一种安全的方法可以在网页中运行 eval 并避免它访问页面其余部分的内容?
问题描述
我想知道是否可以以安全的方式在网页中运行用户提供的代码。
我想添加用户可以动态更改以更改某些页面行为的代码,但我不希望他们使用漏洞。
例如,我想让用户编写一个以安全方式返回布尔值的方法,这样他们就不会在页面中注入恶意代码并更改 dom,也不会窃取页面中其余组件的信息。
function( valuesToUse ) {
//userprovided logic returning true or false depending on the input
return valuesToUse.favouriteAnimal === "Lizard"
}
解决方案
只要用户只运行自己的代码,就不需要任何安全措施。如果他们破坏了网站,他们只会为自己破坏它。
如果要共享这些代码,唯一可靠的方法是拥有一个沙盒 IFRAME 并在其中运行所有内容(查看 SO 片段、JS fiddle 和类似网站的工作方式)。在这种情况下,用户脚本将无法与主页交互。这是一篇关于该主题的好文章:https ://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/
如果您需要 1) 可以与主页交互并且 2) 可以在用户之间共享的用户脚本,那么您必须发明自己的编程语言并将其即时编译为 javascript。JS 中没有选项可以将内置的eval
.
推荐阅读
- angular - Okta 登录小部件打破了 Jest 测试 - TypeError:无法读取 null 的属性“backingStorePixelRatio”
- go - 工作池实施上的退出通道
- internet-explorer-11 - 在 IE11 中禁用 HTTP2
- ruby - 如何使用 HTTParty 对 GitHub 进行身份验证以抓取页面?
- rabbitmq - 使用 MassTransit 时,发布者确认是否默认处于活动状态?
- python - 仅在拖动游戏窗口时才绘制对象
- flutter - Flutter 小部件测试:如果小部件有键,则 find.byKey 不起作用: GlobalKey(debugLabel: "gridView")
- c# - 无法在字符串中获取正则表达式匹配的值
- react-native - mobx-state-tree 不使用 react-native 更新模型
- vaadin - 如何在聚合物 3 中实现 vaadin-grid-tree-column