如何安全地从Electron打开此外部应用?

时间:2018-10-02 10:19:56

标签: node.js shell security electron

我正在制作一个电子应用程序的原型,该应用程序可以使用Node的childProcess API在第三方照片编辑器中打开提供的文件:

const process = childProcess.spawn(
    'open', 
    ['-a', 'Polarr Photo Editor', filename],
    {shell: false}
);

我有点担心传递未经消毒的filename作为参数的安全性。对于上下文,这是应用程序的工作方式:

  1. 它从我们的服务器请求JSON有效负载,该服务器列出了S3中的一组资产
  2. 这些资产在本地下载
  3. 然后,用户可以选择在其编辑器中打开哪个
  4. 进行修改后,他们可以重新上传给我们

我担心的是,第1阶段附近的MITM攻击可能意味着用户下载了一个恶意命名的文件,该文件名在作为参数传递给spawn时可以执行邪恶的操作,例如myCoolFile && doEvilThing ;.jpg

我做了一些测试,还没有发现任何明显的漏洞,但我担心我可能会丢失一些东西。

因此我想知道:

  1. 发送给spawn的参数会劫持该命令,产生有害的副作用-在恶意用户的手中发生任何意外或不希望的事情吗?
  2. 如果是,该怎么办?是否有更好的选择来从Node进程打开第三方应用程序?
  3. 我应该阅读有关Electron应用程序的安全性的一般常规做法吗?

1 个答案:

答案 0 :(得分:1)

我不认为这是安全问题。有两个原因

第一个是文件名,它只是发送给第三方应用程序的一个参数。因此,可执行文件应验证该参数以检查天气是否为文件。如果不是这样,则超出您的范围,您可能不得不要求他们解决此问题,或者验证它是否是文件名。

第二个原因是这种情况发生在客户端,因此即使文件名是手动完成的,用户也将负责传递文件名。您无法控制他可能在自己的系统上执行的操作,这没关系。即使您使不可能成为可能。

如果用户想要破解它,可以始终在其终端上执行open -a Polarr Photo Editor anything_he_want