node.js - 如何安全地从 Electron 打开这个外部应用程序?

标签 node.js shell security electron

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

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

我有点担心传入未经 sanitizer 的 filename 的安全性。作为参数。对于上下文,以下是应用程序的工作方式:
  • 它从我们的服务器请求 JSON 有效负载,其中列出了 S3
  • 中的一组 Assets
  • 这些 Assets 在本地下载
  • 然后用户可以选择在他或她的编辑器中打开哪一个
  • 修改后可以重新上传给我们

  • 我担心第 1 阶段的 MITM 攻击可能意味着用户下载了一个恶意命名的文件,这个文件名在作为参数传递给 spawn 时会做坏事。 ,例如myCoolFile && doEvilThing ;.jpg .

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

    因此我想知道:
  • 可以将参数发送到spawn劫持命令,产生邪恶的副作用 - 在恶意用户手中做任何意外或不受欢迎的事情?
  • 如果是这样,我该怎么办?从 Node 进程打开第三方应用程序是否有更好的选择?
  • 我应该阅读 Electron 应用程序中的安全性方面的一般良好做法吗?
  • 最佳答案

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

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

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

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

    关于node.js - 如何安全地从 Electron 打开这个外部应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52606415/

    相关文章:

    c - 了解 shell 中进程如何工作

    python - 如何在Python脚本执行时检查bash shell脚本的状态?

    php - 使用 PDO 使用表单在数据库中存储 html 代码是否安全?

    .net - cert 和 mozroots 的 Mono 问题

    node.js - 替换mongodb文档而不附加属性

    bash - UNIX AWK 脚本 - 内存耗尽

    node.js - NestJS 在构建应用程序时快速修复 swagger 错误

    iphone - iOS -> .NET WebService 身份验证问题

    javascript - 如何使用 MongoDB/Mongoose.js 查询类似 OR/AND 的条件?

    node.js - 为什么 FeathersJS 身份验证 Hook 从未被调用?