在Javascript中围绕Function()创建沙箱
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Javascript中围绕Function()创建沙箱,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1163字,纯文字阅读大概需要2分钟。
内容图文
我可以将字符串生成的函数(使用Function构造函数)的访问权限限制为父/全局范围吗?
例如:以下代码按原样打印为false,因为该函数正在窗口中存储/修改变量a.
window.a = 4;
Function("a=3;")()
console.log(a === 4);
我可以限制对窗口/父作用域的访问并使其打印为“true”吗?
解决方法:
这是一个额外的想法,可以与Esailija的提议一起非常强大(参见他对讨论的回答的评论).
您可以创建虚拟iframe并使用其Function函数.使用它创建的函数默认只能访问iframe的范围,尽管它仍然可以突破它.幸运的是,就像Esailija建议的那样,很容易防止这种情况发生.
我可以想象这个函数是这样的:
function sandboxed(code) {
var frame = document.createElement('iframe');
document.body.appendChild(frame);
var F = frame.contentWindow.Function,
args = Object.keys(frame.contentWindow).join();
document.body.removeChild(frame);
return F(args, code)();
}
或者你可能想要加上’use strict’;到代码.
这至少在Chrome中有效.以这种方式创建的函数是否可以访问iframe的全局范围,或者页面的全局范围可以通过以下方式轻松测试:
(function() {
var frame = document.createElement('iframe');
document.body.appendChild(frame);
var same = window === frame.contentWindow.Function('return window;')();
alert(same ? ':(' : ':)');
document.body.removeChild(frame);
}());
内容总结
以上是互联网集市为您收集整理的在Javascript中围绕Function()创建沙箱全部内容,希望文章能够帮你解决在Javascript中围绕Function()创建沙箱所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。