【发布时间】:2018-10-02 10:19:55
【问题描述】:
我正在使用 Node 的 childProcess API 制作一个可以在第三方照片编辑器中打开提供的文件的 Electron 应用程序原型:
const process = childProcess.spawn(
'open',
['-a', 'Polarr Photo Editor', filename],
{shell: false}
);
我有点担心传入未经处理的filename 作为参数的安全性。就上下文而言,以下是应用程序的工作方式:
- 它从我们的服务器请求 JSON 负载,其中列出了 S3 中的一组资产
- 这些资产在本地下载
- 然后用户可以选择在他或她的编辑器中打开哪一个
- 修改后,他们可以重新上传给我们
我担心第 1 阶段的 MITM 攻击可能意味着用户下载了一个恶意命名的文件,该文件名在作为参数传递给 spawn 时可以做邪恶的事情,例如myCoolFile && doEvilThing ;.jpg.
我做了一些测试,还没有发现任何明显的漏洞,但我担心我可能会遗漏一些东西。
所以我想知道:
- 发送到
spawn的参数是否会劫持命令,产生不良的副作用——在恶意用户手中做任何意想不到或不受欢迎的事情? - 如果是这样,我该怎么办?从 Node 进程打开第三方应用程序是否有更好的替代方法?
- 是否有任何我应该阅读的关于 Electron 应用程序安全性的一般良好做法?
【问题讨论】:
-
这段代码运行在客户端(我的意思是在电子应用程序中),而不是在你的服务器端,对吧?
-
没错,在 Electron 桌面应用中。
-
我想你可以用npmjs.com/package/valid-filename检查它并检查它是否支持扩展。
标签: node.js shell security electron