【发布时间】:2018-10-01 08:32:56
【问题描述】:
我有以下代码:
exec('sh cert-check-script-delete.sh', req.body.deletedCert);
console.log(req.body.deletedCert);
控制台日志正确显示req.body.deletedCert 非空。
在cert-check-script-delete.sh 我有:
#!/bin/sh
certs.json="./" # Name of JSON file and directory location
echo -e $1 >> certs.json
但它只是给certs.json写了一个空行
我也试过了:
exec('sh cert-check-script-delete.sh' + req.body.deletedCert)
但这两种格式都不起作用
【问题讨论】:
-
顺便说一句,你没有给你的文件一个适当的 shebang(
#!/bin/bash,因为echo -e对sh不安全),设置 +x 位和没有显式解释器直接执行它? -
尝试在.sh后加一个空格,exec('sh cert-check-script-delete.sh ' + req.body.deletedCert)
-
@DaveCarruthers,这是一个巨大的安全风险。假设有人提交代码说他们想删除证书
$(rm -rf ~)。您永远、永远、永远应该将来自传入请求的文本替换为作为 shell 命令的一部分解析的文本。 -
感谢您的建议,但以这种格式编写它现在甚至没有将空行写入
certs.json。另外关于shebang,我不知道有不同类型的shebang,我一定只是从网上复制粘贴了shebang -
@DaveCarruthers 谢谢你的成功!
标签: node.js bash shell parameters arguments