我正在制作一个电子应用程序的原型,该应用程序可以使用Node的childProcess
API在第三方照片编辑器中打开提供的文件:
const process = childProcess.spawn(
'open',
['-a', 'Polarr Photo Editor', filename],
{shell: false}
);
我有点担心传递未经消毒的filename
作为参数的安全性。对于上下文,这是应用程序的工作方式:
我担心的是,第1阶段附近的MITM攻击可能意味着用户下载了一个恶意命名的文件,该文件名在作为参数传递给spawn
时可以执行邪恶的操作,例如myCoolFile && doEvilThing ;.jpg
。
我做了一些测试,还没有发现任何明显的漏洞,但我担心我可能会丢失一些东西。
因此我想知道:
spawn
的参数会劫持该命令,产生有害的副作用-在恶意用户的手中发生任何意外或不希望的事情吗?答案 0 :(得分:1)
我不认为这是安全问题。有两个原因
第一个是文件名,它只是发送给第三方应用程序的一个参数。因此,可执行文件应验证该参数以检查天气是否为文件。如果不是这样,则超出您的范围,您可能不得不要求他们解决此问题,或者验证它是否是文件名。
第二个原因是这种情况发生在客户端,因此即使文件名是手动完成的,用户也将负责传递文件名。您无法控制他可能在自己的系统上执行的操作,这没关系。即使您使不可能成为可能。
如果用户想要破解它,可以始终在其终端上执行open -a Polarr Photo Editor anything_he_want
。