Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS阻止不安全代码访问窗口对象_Javascript_Security_Browser_Sandbox - Fatal编程技术网

Javascript JS阻止不安全代码访问窗口对象

Javascript JS阻止不安全代码访问窗口对象,javascript,security,browser,sandbox,Javascript,Security,Browser,Sandbox,我的最新应用程序的功能-并取决于-为应用程序创建插件的能力 许多默认插件的脚本文件都存储在应用程序的服务器上,但是我想很快扩展,允许用户导入和编写自己的插件,这意味着应用程序运行的是不可信的、未经验证的代码。现在,我知道互联网上有足够多的证据解释为什么运行不受信任的代码是个坏主意,但由于我的应用程序需要这个功能,我没有太多选择 因此,我提出的解决方案如下: export default function sandbox(script: string, API: {[key: string]: a

我的最新应用程序的功能-并取决于-为应用程序创建插件的能力

许多默认插件的脚本文件都存储在应用程序的服务器上,但是我想很快扩展,允许用户导入和编写自己的插件,这意味着应用程序运行的是不可信的、未经验证的代码。现在,我知道互联网上有足够多的证据解释为什么运行不受信任的代码是个坏主意,但由于我的应用程序需要这个功能,我没有太多选择

因此,我提出的解决方案如下:

export default function sandbox(script: string, API: {[key: string]: any}): Partial<Plugin> {
    // language=JavaScript
    const keys: (keyof API)[] = Object.keys(API) as (keyof API)[];
    const fn = new Function(...keys, `const window=void 0,document=void 0,Function=void 0,eval=void 0;${script}`);
    return fn.apply({}, keys.map(i => API[i]))
}
我想知道在这个系统中是否还有我可能错过的任何其他危险(或潜在危险)的安全漏洞,以及我将如何修补它们,而不会过多地限制插件的功能


另外,一些默认插件依赖浏览器API实现UI/网络功能,因此覆盖
函数和
eval
值是次优修复方法。

根据应用程序的使用方式,您可能不需要太担心这一点。如果用户不得不不厌其烦地导入自己的自定义插件,那么任何恶意代码都是。。。嗯,是他们写的。但是,如果你允许人们发布插件,你肯定需要某种验证过程,在允许普通用户下载之前手动检查代码?因为
script:string
是无效的Javascript。JS没有类型检查(Typescript有)@JeremyThille是的,这是Typescript。第一个代码框是typescript,第二个是纯JavaScript。@NiettheDarkAbsol发布插件将成为应用程序的很大一部分,但手动检查是一个可行的选择,直到您在插件库外看到发布的内容,在插件库外无法验证它。如果您真的想这样做,搜索,是否有经过战斗测试,和长期存在的解决方案,并仔细阅读。可能根本没有。对于您眼前的问题:
(function(){}).constructor('alert(“rip”))()
const win = new Function (`return window`)();