【问题标题】:How can I open this external app from Electron securely?如何安全地从 Electron 打开这个外部应用程序?
【发布时间】:2018-10-02 10:19:55
【问题描述】:

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

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 应用程序安全性的一般良好做法?

【问题讨论】:

  • 这段代码运行在客户端(我的意思是在电子应用程序中),而不是在你的服务器端,对吧?
  • 没错,在 Electron 桌面应用中。
  • 我想你可以用npmjs.com/package/valid-filename检查它并检查它是否支持扩展。

标签: node.js shell security electron


【解决方案1】:

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

第一个是文件名只是发送给第三方应用程序的参数。所以该可执行文件应该验证参数以检查它是否是一个文件。如果不是,则超出您的范围,您可能必须要求他们修复该问题,或者验证它是一个文件名。

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

如果你想破解它,你的用户可以随时在他的终端上执行open -a Polarr Photo Editor anything_he_want

【讨论】:

    猜你喜欢
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    相关资源
    最近更新 更多